egison-0.3.1.1: etc/sample/number-test.egi
(define $fib
(lambda [$n]
(match n Nat
{[<o> 1]
[<s <o>> 1]
[<s <s $n1>> (+ (fib (+ n1 1)) (fib n1))]})))
(test (fib 10))
(define $fact
(lambda [$n]
(match n Nat
{[<o> 1]
[<s $n1> (* n (fact n1))]})))
(test (fact 10))
(define $min
(lambda [$ns]
(match ns (List Integer)
{[<cons $n <nil>> n]
[<cons $n $rs>
(let {[$r (min Rs)]}
(match (compare-number n r) Order
{[<less> n]
[_ r]}))]})))
(define $gcd
(lambda [$ns]
(let {[$ns2 ((remove-all Integer) ns 0)]}
(match ns2 (Set Integer)
{[<cons $n <nil>> n]
[<cons ,(min ns2)
$rs>
(gcd {n @(map (lambda [$r] (mod r n))
rs)})]}))))