Prolog 序言:例如,X是3和3是X之间的区别是什么?

Prolog 序言:例如,X是3和3是X之间的区别是什么?,prolog,Prolog,请求三(3),三(5)和three2(3),three2(5)分别具有相同的答案 但是three2(X)有答案3,而three(X)有答案“参数没有充分实例化” 如果有足够的数据来解决3是true和5是false,为什么当我们请求X的值时,没有足够的数据来发现X等于3?这是因为is/2是Prolog的数值表达式求值器。is/2右侧的所有内容都必须完全实例化,以便表达式可以计算为数字(可能遗漏:计算为数字以外的内容)。然后将结果与is/2的左侧统一。如果LHS是未绑定变量或与获得的结果相同,则此操

请求
三(3)
三(5)
three2(3)
three2(5)
分别具有相同的答案

但是
three2(X)
有答案3,而
three(X)
有答案
“参数没有充分实例化”


如果有足够的数据来解决
3
true
5
false
,为什么当我们请求
X
的值时,没有足够的数据来发现
X
等于
3

这是因为
is/2
是Prolog的数值表达式求值器。
is/2
右侧的所有内容都必须完全实例化,以便表达式可以计算为数字(可能遗漏:计算为数字以外的内容)。然后将结果与
is/2
的左侧统一。如果LHS是未绑定变量或与获得的结果相同,则此操作成功

在您的例子中,您可以通过统一使谓词
three/1
对称,因为实际上没有什么可计算的:

three_sym(X):-3=X。
使用
3
成功,并为未绑定的
X
输出答案
X=3

three(X) :- 3 is X.

three2(X) :- X is 3.