如何从Prolog中的基本谓词(?)返回两个值?

时间:2014-03-12 21:51:09

标签: prolog

一小时前我刚刚开始浏览Prolog,并且已经发现了一个我不确定的轻微问题。我正在编写一个谓词(或函数?),它接受一个列表并返回最小值和最大值。现在,我只是看一下列表中有1个项目的特殊情况之一。例如,如果查询minmax([5],X,Y)。我希望谓词返回X = 5 Y = 5。我有这段代码:

minmax([X], X, X). 

但是它返回X = Y,Y = 5.我知道这是一个真实的陈述而且微不足道,但有没有办法可以返回X = 5,Y = 5 ???

2 个答案:

答案 0 :(得分:1)

X=Y, Y=5表示XY现在都等于5。这只是一种不同的说法;你真的不应该在乎。如果您同时打印两个值,则只需5

?- [user].
|: print_stuff :-
|:   X = Y,
|:   Y = 5,
|:   write('X = '), writeln(X),
|:   write('Y = '), writeln(Y).
|: % user://1 compiled 0.02 sec, 2 clauses
true.

?- print_stuff.
X = 5
Y = 5
true.

答案 1 :(得分:1)

它正在回归你的想法。 X是5,Y是Y.值是统一,因此解释器显示消息X=Y, Y=5.您需要获取Prolog教科书并阅读术语的统一

你可以轻易说出

foo(A,B) :- A = 5 , B is (A+A)/2 .

并查询它:

?- foo(X,Y).

得到相同的结果。在Prolog世界中,只有一个整数5的实例。