Prolog冒险:为什么? - gizmo(X,X)。失败?

时间:2015-07-30 14:30:37

标签: prolog

我是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)
例如,

,两者似乎都像通配符一样,分别返回每个可能的a和每个可能的3个结果...

我以为

gizmo(X,X)

会返回双方的所有可能结果(字母和数字),而是返回失败,而不是其他结果。

有人愿意解释为什么它会失败而不是从每一方返回所有价值,请记住我是初学者吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

X是一个变量,但它是一个独特的变量。 gizmo(X,X).将返回X的所有可能值。但是左侧和右侧的值相同,因为它是相同的变量(即X)。

如果您有事实gizmo(z,z).,则gizmo(X,X).会正确返回X = z

要获得gizmo为真的所有可能对,您希望使用gizmo(X,Y).或任何其他变量名称,只要它们不同。