Prolog:返回变量,检查变量是否为特定类型?

Prolog:返回变量,检查变量是否为特定类型?,prolog,Prolog,我不熟悉Prolog,不能很好地理解谓词。 第一个问题:如何“返回”某个变量? 我们有备选方案(?A,B)候补者(第一,第二)应该还给我第二,而候补者(第二,第一)应该还给第一 第二个问题:如何检查变量是否为特定类型? 例如,我有ispair(?Pair)。我必须检查Pair是否为pos(X,Y)不确定这是否是您的意思,但下面的情况如何: alternate(first, pair(X,_), X). alternate(second, pair(_,X), X). 如果查询时没有任何限制,则

我不熟悉Prolog,不能很好地理解谓词。 第一个问题:如何“返回”某个变量? 我们有
备选方案(?A,B)
<代码>候补者(第一,第二)应该还给我
第二
,而
候补者(第二,第一)
应该还给
第一

第二个问题:如何检查变量是否为特定类型?
例如,我有
ispair(?Pair)
。我必须检查
Pair
是否为
pos(X,Y)

不确定这是否是您的意思,但下面的情况如何:

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
你也可以问:b在这对(a,b)的哪一边

如果您的配对是(b,b),您将得到两个解决方案:

?- alternate(Where, pair(b,b), b).
Where = first ;
Where = second.
此外,c不是该对(a,b)的一部分:

如果你坚持从天堂中挑选一种元素,你会得到否定的答案:

?- alternate(heaven, X, Y).
false.
当您知道配对的第一个元素是a时,prolog将告诉您配对的外观:

?- alternate(first, X, a).
X = pair(a, _5680).

这里还有一个新变量(_5680),因为任何第二项都可以。

谓词是关系(只有true或false)。如果你想得到一个结果,它必须进入参数中。例如,
sum(A,B,Result)
将是一个带有三个参数的谓词,声称A+B=Result有效。请注意,变量必须以大写字母开头(或者如果是匿名的话,
)。如果您有一个变量,
Pair
并且想要查询它是否匹配(可以与)一个术语,您可以使用统一运算符,
=/2
:因此如果匹配,
Pair=pos(X,Y)
将成功,并且将相应地实例化
X
Y
。在Prolog提示符下尝试一些例子来了解它是如何工作的。要理解Prolog,请确保你没有想到它是一种奇怪的命令式语言。这是一个非常不同的野兽-它是一种声明性语言。理解不同的范式是困难的,但也是非常有益的。祝你好运非常感谢大家!
?- alternate(heaven, X, Y).
false.
?- alternate(first, X, a).
X = pair(a, _5680).