【发布时间】:2021-07-01 19:48:15
【问题描述】:
当我有序言程序时
f(X) :- X==[].
输出是
|:-f(X).
false.
:-f([]).
true.
在第一个输出序言中声称没有X,因此f(X) 为真。
但是f([]) 是真的,所以prolog 应该说X=[]。作为第一个查询的答案。
这是为什么?我该如何解决它。
a(X,X).
b(A,B) :- A==X,B==X.
还有一个更严重的问题:
|:-a([a],[a]).
true.
:-b([a],[a]).
false.
我相信a 和b 是完全相同的陈述,只是写法不同。
IDE 声称 A==X 总是错误的,所以我想我对变量在 prolog 中的工作方式有一个严重的误解。
【问题讨论】:
-
(==)/2不是纯关系。它是在当前时间点* 进行的测试。请改用(=)/2来获得您可能期望的结果。因此b(A,B) :- A=X, B=X.
标签: prolog