In Forth you can use control structures only inside colon definitions.
An if
-structure looks like this:
: abs ( n1 -- +n2 ) dup 0 < if negate endif ; 5 abs . -5 abs .
if
takes a flag from the stack. If the flag is non-zero (true),
the following code is performed, otherwise execution continues after the
endif
(or else
). <
compares the top two stack
elements and produces a flag:
1 2 < . 2 1 < . 1 1 < .
Actually the standard name for endif
is then
. This
tutorial presents the examples using endif
, because this is often
less confusing for people familiar with other programming languages
where then
has a different meaning. If your system does not have
endif
, define it with
: endif postpone then ; immediate
You can optionally use an else
-part:
: min ( n1 n2 -- n ) 2dup < if drop else nip endif ; 2 3 min . 3 2 min .
Assignment: Write
min
withoutelse
-part (hint: what’s the definition ofnip
?).
Reference: Selection.