【问题标题】:Why it doesn't unify? prolog为什么不统一?序言
【发布时间】:2019-01-09 16:00:36
【问题描述】:

这里有两个谓词 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(1, X),而您的len/2仅与[][_|_]统一,而不是数字)。

标签: prolog


【解决方案1】:

你应该做到的

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

【讨论】:

  • 谢谢!!你解决了我的问题!另一个问题,为什么我写这个:minL(L):- len(L,X), X
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 2018-09-24
相关资源
最近更新 更多