2014-03-12 87 views
0

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

minmax([X], X, X). 

,但它返回X = Y,Y = 5。我知道这是一个真实的说明和琐碎,但有一个方法可以让我回到X = 5,Y = 5? ??

回答

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的实例。

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.