main
Where
Let main args.
Let n.
Match (LIST.fetch args 1)
| `nothing (OS.die "Expected a number argument.")
| `just.arg
Match (Z.read arg)
| `nothing (OS.die "Expected a number argument.")
| `just.n n
;
;
In
(STDIO.print_line $ Z.show $ factorial n)
Where
Let factorial n.
Begin (multiplying 1 2)
Define multiplying f m.
If (m > n)
f
Goto (multiplying (f * m) (m + 1))
Where
Let LIST. Package "list"
Let OS. Package "os"
Let STDIO. Package "stdio"
Let Z. Package "z"