evalplus

戻る
(* 型の宣言 *)
type t = Num of int
          | Plus of t * t
type v = VNum of int

(* 値を文字列に変換する関数 *)
let v_to_string v = match v with
    VNum(n) -> string_of_int n

(* インタープリタ *)
let rec eval (t, e) = match t with
    Num(n) -> VNum(n)
  | Plus(t0, t1) -> (let v1 = eval (t1, e)
      in let v0 = eval (t0, e)
      in (match (v1, v0) with (VNum(vn1), VNum(vn0))
            -> VNum(vn1 + vn0)))
let f t = eval (t, [])