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

如何从Prolog中的基本谓词(?)返回两个值?,prolog,Prolog,大约一小时前,我刚开始复习序言,已经遇到了一个我不确定的小问题。我正在编写一个谓词(或函数?),它接受一个列表并返回最小值和最大值。现在,我只看一个特殊情况,当列表有一个项目时。例如,如果查询minmax([5],X,Y)。我希望谓词返回X=5y=5。我有以下代码: minmax([X], X, X). 但它返回X=Y,Y=5。我知道这是一个真实的陈述,而且很琐碎,但是有没有一种方法可以返回X=5,Y=5??X=Y,Y=5意味着X和Y现在都等于5。这只是另一种说法;你真的不该在乎。如果同时打

大约一小时前,我刚开始复习序言,已经遇到了一个我不确定的小问题。我正在编写一个谓词(或函数?),它接受一个列表并返回最小值和最大值。现在,我只看一个特殊情况,当列表有一个项目时。例如,如果查询minmax([5],X,Y)。我希望谓词返回X=5y=5。我有以下代码:

minmax([X], X, X). 

但它返回X=Y,Y=5。我知道这是一个真实的陈述,而且很琐碎,但是有没有一种方法可以返回X=5,Y=5??

X=Y,Y=5
意味着
X
Y
现在都等于
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.

它正在返回你认为它是什么。X等于5,Y等于5。值是统一的,因此解释器显示消息
X=Y,Y=5。
您需要拿出Prolog教科书,阅读术语统一

你可以很容易地说

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

?- foo(X,Y).
得到同样的结果。在Prolog中,只有整数
5
的一个实例