Ibis クイックチュートリアル

Ibis Interpreter

四則演算

> 1 + 2 * 3
- : int = 7
> (1 + 2) * 3
- : int = 9

変数

> let x = 123
- : int = 123
> x
- : int = 123

関数

> let double = fun x -> x * 2
- : (int -> int) = <closure>
> double 2
- : int = 4

再帰関数

> let rec fac = fun n -> if n = 0 then 1 else n * fac (n - 1)
- : (int -> int) = <closure>
> fac 10
- : int = 3628800

多相関数

> let id = fun x -> x
- : ('a -> 'a) = <closure>
> id 1
- : int = 1
> id true
- : bool = true

タプル

> let (a, b) = (1, 2)
- : (int * int) = (1, 2)
> a
- : int = 1
> b
- : int = 2

バリアント

> type num = Zero of unit | Pos of int | Neg of int
- : unit = ()
> let num_to_int = fun n -> case n of Zero -> fun _ -> 0 | Pos -> fun i -> i | Neg -> fun i -> 0 - i
- : (num -> int) = <closure>
> num_to_int (Zero ())
- : int = 0
> num_to_int (Pos 123)
- : int = 123
> num_to_int (Neg 456)
- : int = -456
> let is_zero = fun n -> case n of Zero -> fun _ -> true | else -> fun _ -> false
- : num -> bool = <closure>
> is_zero (Zero ())
- : bool = true

再帰的なバリアント

> type nat = Zero of unit | Succ of nat
- : unit = ()
> let zero = Zero ()
- : nat = (Zero ())
> let one = Succ zero
- : nat = (Succ (Zero ()))
> let two = Succ one
- : nat = (Succ (Succ (Zero ())))
> let rec add = fun m -> fun n -> case m of Zero -> fun _ -> n | Succ -> fun k -> Succ (add k n)
- : (nat -> (nat -> nat)) = <closure>
> add one two
- : nat = (Succ (Succ (Succ (Zero ()))))