Node:Calls and returns, Next:Exception Handling, Previous:Arbitrary control structures, Up:Control Structures
A definition can be called simply be writing the name of the definition
to be called. Normally a definition is invisible during its own
definition. If you want to write a directly recursive definition, you
recursive to make the current definition visible, or
recurse to call the current definition directly.
Make the current definition visible, enabling it to call itself recursively.
recursivecompilation -- ; run-time -- gforth ``recursive''
Call the current definition.
recursecompilation -- ; run-time ?? -- ?? core ``recurse''
Programming style note: I prefer using
recurse, because calling the definition by name is more descriptive (if the name is well-chosen) than the somewhat cryptic
recurse. E.g., in a quicksort implementation, it is much better to read (and think) "now sort the partitions" than to read "now do a recursive call".
For mutual recursion, use
Deferred words, like this:
Defer foo : bar ( ... -- ... ) ... foo ... ; :noname ( ... -- ... ) ... bar ... ; IS foo
Deferred words are discussed in more detail in Deferred words.
The current definition returns control to the calling definition when
the end of the definition is reached or
EXIT is encountered.
Return to the calling definition; usually used as a way of forcing an early return from a definition. Before
EXITcompilation -- ; run-time nest-sys -- core ``EXIT''
EXITing you must clean up the return stack and
The primitive compiled by
;sR:w -- gforth ``semis''