当我有序言程序时
f(X) :- X==[].
Run Code Online (Sandbox Code Playgroud)
输出是
|:-f(X).
false.
:-f([]).
true.
Run Code Online (Sandbox Code Playgroud)
在第一个输出 prolog 中声称没有X,所以这f(X)是真的。
但f([])确实如此,所以序言应该说X=[]。作为第一个查询的答案。
为什么是这样?我该如何解决。
a(X,X).
b(A,B) :- A==X,B==X.
Run Code Online (Sandbox Code Playgroud)
还有一个更严重的问题:
|:-a([a],[a]).
true.
:-b([a],[a]).
false.
Run Code Online (Sandbox Code Playgroud)
我相信,a和b是完全一样的语句,只是有不同的写法。
IDE 声称这A==X总是错误的,所以我想我对变量在 prolog 中的工作方式有严重的误解。
prolog ×1