docs/learn-control-flow.md
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
-----
content-type: "page"
title: "Learn: Control Flow"
-----
{@ _defs_.md || 0 @}
The {#link-module#} provide some symbols that can be used for the most common control flow statements. Unlike most programming languages, mn does not differentiate between functions and statements -- control flow statements are just ordinary symbols that manipulate the main stack.
## Conditionals
The {#link-symbol||when#} symbol can be used to implement conditional statements.
For example, consider the following program:
(
"unknown" (os) let
[uname] (uname) let
(uname "MINGW" indexof -1 !=)
("windows" (os) bind)
when
(uname "Linux" indexof -1 !=)
("linux" (os) bind)
when
(uname "Darwin" indexof -1 !=)
("macosx" (os) bind)
when
"The current OS is $#" (os) interpolate puts
) (display-os) lambda
This program defines a symbol `display-file-info` that execute the **uname** system command to discover the operating system and outputs a message.
## Loops
The following symbols provide ways to implement common loops:
* {#link-symbol||foreach#}
* {#link-symbol||while#}
For example, consider the following program:
(
(n) let
1 (i) let
1 (f) let
(i n <=)
(
f i * (f) bind
i 1 + (i) bind
) while
f
) (factorial) lambda
This program defines a symbol `factorial` that calculates the factorial of an integer iteratively using the symbol {#link-symbol||while#}.
|