Prolog:返回变量,检查变量是否属于某种类型?

时间:2018-05-16 09:44:11

标签: prolog

我是Prolog的新手,无法很好地理解谓词。 第一个问题:我如何“返回”某个变量? 我们有alternate(?A, ?B)alternate(first, second)应该让我回复second,而alternate(second, first)应该回馈first

第二个问题:如何检查变量是否属于某种类型? 我有例如ispair(?Pair)。我必须检查Pairpos(X,Y)

1 个答案:

答案 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),因为任何第二个术语都没问题。