【发布时间】:2016-03-15 04:29:15
【问题描述】:
我正在尝试从两个列表中找到 2 个最小数字。我可以从一个列表中找到,但是如果第二个最小数字在第二个列表中怎么办。
例如,min_in_list([2,8,7], [5,3,4], M) 应该是M = [2, 3]。
下面的代码是一个列表。
min_in_list([Min],Min). % We've found the minimum
min_in_list([H,K|T],M) :-
H =< K, % H is less than or equal to K
min_in_list([H|T],M). % so use H
min_in_list([H,K|T],M) :-
H > K, % H is greater than K
min_in_list([K|T],M). % so use K
【问题讨论】:
-
最好的办法是有两个最小变量,然后遍历列表并比较两者,在适当的时候替换值。我不是 prolog 人,所以我无法帮助编写代码。
-
如果你的
min_in_list对一个列表有效,那么你可以使用它两次:min_in_list(L1, L2, [M1, M2]) :- min_in_list(L1, M1), min_in_list(L2, M2).不过,这似乎是一个奇怪的谓词,它需要硬编码的参数来独立获得最小值两个不同的列表,除非列表之间存在您未提及的其他关系。 -
我不明白这与分别为每个列表查找最小值有何不同?