我试图用Prolog编写类型检查器,但是我是Prolog的菜鸟,我的规则不起作用,我不明白为什么?
(我已经为bool
等定义了事实)
类型是列表,例如int * int -> int
是[int,int,int]
,因此“ add”的类型是lastOf([int,int,int])
我的规则:if e1:bool, if e2:t and if e3:t, so (if e1 e2 e3):t
我的Prolog规则:
type( iF(Cond, Cons, Alter), Env, Y) :-
type( Cond, Env, T1) ,
type( Cons, Env, T2),
type( Alter, Env, T2),
lastOf( X, T1),
X == bool,
lastOf( Y, T2).