为什么不统一?序言

时间:2019-01-09 16:00:36

标签: prolog

这里有两个谓词 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”有效,我已经对其进行了测试,但是我不明白为什么将谓词放在另一个中会如此工作。谢谢!

1 个答案:

答案 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不是列表,因此未定义。