这里有两个谓词 len->返回列表的长度。 processRel->呼叫len。
len([],0).
len([_|T], R):-
len(T,X),
R is X+1.
processRel([H|Q],X):-
len(H,X).
为什么不统一? 它返回此:
?-processRel([1,2,3,4],X)。
否。
而不是(我的期望): X = 4。
谓词“ len”有效,我已经对其进行了测试,但是我不明白为什么将谓词放在另一个中会如此工作。谢谢!
答案 0 :(得分:2)
您应该做到
processRel(L,X):-
len(L,X).
现在是
processRel([H|Q],X):-
len(H,X).
插入[1,2,3,4]
意味着我们得到了
processRel([1,2,3,4],X):-
len(1,X).
因此它统一为len(1,X)
。由于1不是列表,因此未定义。