Wil Baden, 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 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,returnandexitavailable, state-FORTH offers exit,leave,endloop,quit,abort,abort "abortand(to. In FORTH EXIT to used to leave the definition, in which it appears, however, the smallest enclosing leaves LEAVE DO ... LOOP.
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.
They work well as control statements, as the definitions ofARGUMENTSandISDEPTH::
((( is-depth (n -) depth 1 - - abort "wrong number of parameters!" ; )))
IS-DEPTH review the stack on a given number of stack elements (depth point).
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, 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:
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;
)))
PUSHINGis 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 wordRESULTSis 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 ofBETWEENaccording 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 ...)