! Program structures [(TableOfContents)] \ \ [Wil Baden | http://home.earthlink.net/ ~ neilbawd /], which you encounter in the English literature often has, in Escaping his contribution FORTH stated the following: There are four types of control statements: * The sequence of instructions * The selection of program parts, * The repetition of instructions and parts of the program, * The demolition. The first three possibilities are absolutely necessary and in the older languages such as PASCAL exclusively available. According to a statement is in the people-FORTH for the selection of program parts are available, the execution is the result of a logical expression subject: ((( IF flag THEN <Anweisungen> IF flag THEN <Anweisungen> ELSE <Anweisungen> ))) Where, however, the program made a return for instructions wiederho1t run is used for a given number of times this statement, with the current index of I and J is available: ((( <Grenzen> DO /? <Anweisungen> DO LOOP <Grenzen> DO /? <Anweisungen> <Schrittweite> DO + LOOP ))) If a repetition of instructions to be executed without the number of runs known 1st, it is an index variable board or otherwise to the result of a logical expression to come. The following construction provides an infinite loop: ((( BEGIN REPEAT <Anweisungen> ))) The repetition of statements are so far balanced that a statement is so long (while running), such an expression is true, or a statement is repeated, right up to (until) one expression. ((( BEGIN UNTIL <Anweisungen> flag <Anweisungen> Flag BEGIN WHILE REPEAT <Anweisungen> ))) Both possibilities can in populous FORTH combine, including several (multiple) WHILE may occur in a control statement. ((( BEGIN WHILE <Anweisungen> <Anweisungen> flag flag UNTIL ))) Now occurs in applications often the case that a control instruction to be abandoned, because something has happened. Then the fourth situation, the demolition, given the programming language "C" provides for the functions:''break'',''continue'',''return''and''exit''available, state-FORTH offers ''exit'',''leave'',''endloop'',''quit'',''abort'',''abort "abort''and''(''to. In FORTH EXIT to used to leave the definition, in which it appears, however, the smallest enclosing leaves LEAVE DO ... LOOP. ! Glossary As of version 3.81.8 has state-FORTH on additional control instruction for the compiler, conditional compilation in the form: ((( <word> have not. <action1> IF. <action2> ELSE. THEN ))) DieseWorte be used outside of colon definitions and replace the''\''needs of earlier versions. * [Have] * [Exit] * [? Exit | question-exit] * [0 = exit |-equals-zero exit] * [If] * [. IF] * [Then] * [. THEN] * [Else] * [. ELSE] * [Do] * [? Do | question-do] * [Loop] * [+ Loop | plus-loop] * [I] * [J] * [Leave] * [Endloop] * [Bounds] * [Begin] * [Repeat] * [Until] * [While] * [Execute] * [Perform] * [Case? | Case-question] * [Stop] ! Words for error handling They work well as control statements, as the definitions of''ARGUMENTS''and''IS''DEPTH:: ((( is-depth (n -) depth 1 - - abort "wrong number of parameters!" ; ))) IS-DEPTH review the stack on a given number of stack elements (depth point). * [Abort] * ['Abort | abort-tick] * [Abort "| abort-quote] * [Error "| error rate] * [Error handler] * [(Error | paren-error] * [R # | r-sharp] * [Scr] * [Quit] * [? Pairs | question-pairs] ! Case distinction in FORTH ! With IF ELSE structuring THEN / ENDIF It is worth briefly the various possibilities are shown, which can merde made a case distinction in FORTH. Characteristic of such a program situation is that just from a different possibilities of the program flow to be chosen. Starting from a clear problem, a game, are described based on the necessary definitions and the development of the above-described control structure. An example is a game with simple rules: This drinking game, which according to the article "Ultimate CASE Statement" ([Fourth Dimension 2 / 87 | http://forth-ev.de/filemgmt/visit.php?lid=116], page 40 ff) also called CRAPS is, it is about to distribute a supply of jars filled with the players with the help of the cube and leerzutrinken: * When ONE was taken a glass out of the stock in the middle of the table and placed before him. * For a TWO or THREE got the neighbor / neighbor left zugesehoben a glass of its own stock. * If the FOUR or FIVE was the neighbor about the neighbor on the right set before a glass of its own stock. * At a SIX, all glasses, the gamer had emptied before him. Assignment is: 1 = accept, 2 / 3 = left, 4 / 5 = right, drink 6 = and according to the number of the cube is one of six possible actions are executed. The program should be limited to, read and evaluate the outcome of dice. A message is issued to perform which of the six acts. For such a program a number entry is required. This was realized here with the word-F83 NUMBERS: ((( : F83-number? (String - d f) number? ? Dup IF 0 <IF THEN extend true exit THEN drop false 0 0; : Input # (string - s) pad c / l 1 -> expect F83-pad number? 2drop; ))) The definition of the words that are to carry six above-mentioned actions symbolically depends on the rules that dictate exactly one result for each cube action: ((( \ Take drink push left right : Take bright. "Take a glass of" normal two spaces; : Drink bright. "Drink all the glasses" normal two spaces; spaces: left bright. "a glass to the left" normal 2; spaces: the right bright. "a glass to the right" normal 2; : Slide; ))) PUSHING''''is a dummy procedure, a filler, the necessity arises only very late. For dialogue with countries will deflniert users: ((( : Cr request. "If you take drink or move?" cr. "Please your eyes and <cr> number:"; : Congratulations cr. "Good luck on the next roll ..." ; ))) The word''RESULTS''is to perform in accordance with a selector just one of 6 possible procedures. So we will examine whether this or this or ... the Mogiichkeiten comes into question. Add to that the test whether the passed parameter was between (between) 1 and 6. The Def nit! On is of''BETWEEN''according to folk-FORTH quite short: ((( (Lower limit value ceiling - false or) (- True if lower <<= value = upper limit) : Between 1 + uwithin; : Auswertung.1 (draft results -) dup 1 = IF ELSE take dup IF 2 = move left ELSE dup = 3 ELSE IF one left dup 4 ELSE IF the right move dup 5 ELSE IF the right move dup 6 = IF THEN drink THEN THEN THEN THEN THEN 1 6 between IF not inversely. "Fraud!" THEN normal; ))) (To be continued ...)