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.

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 ...)