Prolog 中的冒险:为什么?- gizmo(X,X)。失败?
Adventure In Prolog: Why does ?- gizmo(X,X). fail?
我是 Prolog 的新手,正在完成 Chapter 3 of Adventure In Prolog 的练习。鉴于逻辑基础:
gizmo(a,1).
gizmo(b,3).
gizmo(a,2).
gizmo(d,5).
gizmo(c,3).
gizmo(a,3).
gizmo(c,4).
为什么
| ?- gizmo(X,X).
结果如下?
更具体地说,为什么会失败?
| ?- gizmo(X,X).
1 1 Call: gizmo(_279,_279) ? c
1 1 Fail: gizmo(_279,_279) ? c
(1 ms) no
{trace}
自
gizmo(a,X)
和
gizmo (X,3)
,例如,两者似乎都像通配符和 return 每个可能的 a 和每个可能的 3 结果分别...
我以为
gizmo(X,X)
会 return 双方(字母和数字)的所有可能结果,但 return 是失败的,没有其他结果。
有人愿意解释为什么它会失败,而不是 return 考虑每一方的所有值,记住我是初学者吗?
提前致谢。
X
是一个变量,但它是唯一的。 gizmo(X,X).
将 return 每个可能的 X
值为真。但这是左侧和右侧的相同值,因为它是相同的变量(即 X
)。
如果你有一个事实 gizmo(z,z).
,那么 gizmo(X,X).
将正确 return X = z
。
要获得所有可能的 gizmo
为真的对,您需要使用 gizmo(X,Y).
或任何其他变量名称,只要它们不同即可。
我是 Prolog 的新手,正在完成 Chapter 3 of Adventure In Prolog 的练习。鉴于逻辑基础:
gizmo(a,1).
gizmo(b,3).
gizmo(a,2).
gizmo(d,5).
gizmo(c,3).
gizmo(a,3).
gizmo(c,4).
为什么
| ?- gizmo(X,X).
结果如下?
更具体地说,为什么会失败?
| ?- gizmo(X,X).
1 1 Call: gizmo(_279,_279) ? c
1 1 Fail: gizmo(_279,_279) ? c
(1 ms) no
{trace}
自
gizmo(a,X)
和
gizmo (X,3)
,例如,两者似乎都像通配符和 return 每个可能的 a 和每个可能的 3 结果分别...
我以为
gizmo(X,X)
会 return 双方(字母和数字)的所有可能结果,但 return 是失败的,没有其他结果。
有人愿意解释为什么它会失败,而不是 return 考虑每一方的所有值,记住我是初学者吗?
提前致谢。
X
是一个变量,但它是唯一的。 gizmo(X,X).
将 return 每个可能的 X
值为真。但这是左侧和右侧的相同值,因为它是相同的变量(即 X
)。
如果你有一个事实 gizmo(z,z).
,那么 gizmo(X,X).
将正确 return X = z
。
要获得所有可能的 gizmo
为真的对,您需要使用 gizmo(X,Y).
或任何其他变量名称,只要它们不同即可。