我是初学者,我使用的术语可能不准确。
我有
type t = True | False | If of t * t * t | Int of int | Plus of t * t | GT of t * t
let isval t =
match t with
True|False -> true
| Int _ -> true
| _ -> false
我想实现一个 eval 函数。
let rec step t =
match isval t with
true -> raise NormalForm
| false -> match t with
If(t1, t2, t3) when t1=True -> t2
| If(t1, t2, t3) when t1=False -> t3
| Plus(t1, t2) -> t1+t2
| GT(t1, t2) -> t1>t2
| _ -> raise NormalForm;;
发生错误Plus(t1, t2) -> t1+t2
,提示“此表达式的类型为 t,但表达式应为 int 类型”。
问题是什么?我应该如何解决它?