当我有序言程序时
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 中的工作方式有严重的误解。
==/2不会做你认为它会做的事情。引用文档,@Term1 == @Term2是
如果
Term1等价于 ,则为真Term2。变量仅与共享变量相同。
这意味着这A == A是真的,但是A == B是假的,A == []是假的。
你所寻找的是统一的,=/2其中
A = A 是真的A = B是真实的(而A与B成为相同的变量:A = B, A = 3在两个结果A和B变3)。A = []为真(并A与空列表统一)。看
=/2==/2| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |