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). 或任何其他变量名称,只要它们不同即可。