我是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)
会返回双方的所有可能结果(字母和数字),而是返回失败,而不是其他结果。
有人愿意解释为什么它会失败而不是从每一方返回所有价值,请记住我是初学者吗?
提前致谢。
答案 0 :(得分:3)
X
是一个变量,但它是一个独特的变量。 gizmo(X,X).
将返回X
的所有可能值。但是左侧和右侧的值相同,因为它是相同的变量(即X
)。
如果您有事实gizmo(z,z).
,则gizmo(X,X).
会正确返回X = z
。
要获得gizmo
为真的所有可能对,您希望使用gizmo(X,Y).
或任何其他变量名称,只要它们不同。