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
。
我的程序中可能是正确的代码行? 我无法解决错误!!!!
答案 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