Program structures#
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 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,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.
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
- 0 = exit
- If
- . IF
- Then
- . THEN
- Else
- . ELSE
- Do
- ? Do
- Loop
- + Loop
- I
- J
- Leave
- Endloop
- Bounds
- Begin
- Repeat
- Until
- While
- Execute
- Perform
- Case?
- Stop
Words for error handling#
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).
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, 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;
)))
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 ...)