prolog - Prolog:一次又一次地查找最小值,直到列表为空
问题描述
如何重复提取最小数量直到列表为空?
我想找到一个最小值,然后将其从原始列表中排除,然后一次又一次地找到最小值,直到列表为空。
输入:
?- Find_Minimum([2, 1, 4, 3, 5], C)
输出:
C = 1
C = 2
C = 3
C = 4
C = 5
False
解决方案
sort/2
这是一个使用(在 SWI 中)的简单解决方案:
minimum(L,E):-
sort(L,LSorted),
pick(LSorted,E).
pick([H|_],H).
pick([_|T],E):-
pick(T,E).
?- minimum([2,1,4,3,5],E).
E = 1
E = 2
E = 3
E = 4
E = 5
false
请记住,sort/2
删除重复项。例如,如果您想保留它们msort/2
(在 SWI 中)。对于更简单的解决方案,您可以使用member/2
:
minimum(L,E):-
sort(L,LSorted),
member(E,LSorted).
?- minimum([2,1,4,3,5],E).
E = 1
E = 2
E = 3
E = 4
E = 5