首页 > 解决方案 > Prolog:一次又一次地查找最小值,直到列表为空

问题描述

如何重复提取最小数量直到列表为空?

我想找到一个最小值,然后将其从原始列表中排除,然后一次又一次地找到最小值,直到列表为空。

输入:

?- Find_Minimum([2, 1, 4, 3, 5], C)

输出:

C = 1
C = 2
C = 3
C = 4
C = 5
False

标签: prolog

解决方案


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

推荐阅读