我是Prolog的新手,无法很好地理解谓词。
第一个问题:我如何“返回”某个变量?
我们有alternate(?A, ?B)
。 alternate(first, second)
应该让我回复second
,而alternate(second, first)
应该回馈first
。
第二个问题:如何检查变量是否属于某种类型?
我有例如ispair(?Pair)
。我必须检查Pair
是pos(X,Y)
。
答案 0 :(得分:2)
不确定这是不是你的意思,但以下内容如何:
alternate(first, pair(X,_), X).
alternate(second, pair(_,X), X).
如果您没有任何限制地进行查询,则会得到以下两个答案:
?- alternate(X,Y,Z).
X = first,
Y = pair(Z, _5844) ; % hit ; to get the second answer
X = second,
Y = pair(_5842, Z). % variables _12345 are fresh ones created by prolog
您还可以问:该对(a,b)的哪一侧是b?
?- alternate(Where, pair(a,b), b).
Where = second.
如果你的对是(b,b),你会得到两个解决方案:
?- alternate(Where, pair(b,b), b).
Where = first ;
Where = second.
此外,c不是该对(a,b)的一部分:
?- alternate(Where, pair(a,b), c).
false.
如果你坚持从天堂中挑选一个元素,你将得不到答案:
?- alternate(heaven, X, Y).
false.
当你知道一对中的第一个元素是a时,prolog会告诉你这对是怎么样的:
?- alternate(first, X, a).
X = pair(a, _5680).
我们再次有一个新的变量(_5680),因为任何第二个术语都没问题。