prolog中的错误

时间:2011-05-05 10:41:42

标签: prolog

lookup([(X,A)|_],X,A).      
lookup([_|L],X,A) :- lookup(L,X,A).

hi(_,t,bool).      
hi(_,f,bool).
hi(g,var(X),Y) :- lookup(g,X,Y).
hi(_,in(X),int).
hi(_,fl(X),real_exp).
hi(g,plus(A,B),int) :- hi(g,A,int),hi(g,B,int),!.  

我在Prolog中有上面的代码行,基本上检查加号操作的类型

所以当我在终端上有以下查询时:

hi([],plus(in(1),in(2)),T).  

我的答案是假的而不是T = int

我的程序中可能是正确的代码行? 我无法解决错误!!!!

2 个答案:

答案 0 :(得分:1)

您在 hi / 3 的规则中使用了原子g,您可能想要使用变量G

答案 1 :(得分:0)

加号规则是: hi( g ,加上(A,B),int): - hi(g,A,int),hi(g,B,int),!

你拨打电话时: 喜(的 [] 下,加号(在(1),(2)),T)。

不确定你想用g和[]做什么(或许某些令牌列表?)但看起来你必须改变查询或规则(或者还有一条规则)。也许g应该是变量G?真的不能告诉xd