Prolog 为什么没有';不统一?序言

Prolog 为什么没有';不统一?序言,prolog,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”起作用,我已经测试过了,但我不明白为什么如果将该谓词放在另一个谓词中

这里我们有两个谓词 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”起作用,我已经测试过了,但我不明白为什么如果将该谓词放在另一个谓词中,它会这样工作。谢谢大家!

你应该来

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不是一个列表。

它确实与头统一,但是你调用
len(1,X)
,而你的
len/2
只与
[]
[\u124;]
统一,而不是与数字统一。谢谢!!你解决了我的问题!另一个问题,为什么我要写这个:minL(L):-len(L,X),X