Prolog - 通过屈服获得不同的结果

Aut*_*ass 2 prolog yield-keyword

我正在尝试编写一个prolog程序,它需要有一个谓词,每次调用时都返回最小变量.但我需要这样一种方式,即如果你产生函数,它应该返回下一个最小值.例如:

min([5,3,2,7],B).
B = 2 ;
B = 3 ;
B = 5 ;
B = 7 ;
false.
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Cap*_*liC 5

min(L, Min) :- sort(L, S), member(Min, S).
Run Code Online (Sandbox Code Playgroud)

将为您的示例数据做.更一般地,setof/3将允许构建针对通用目标的排序的解决方案列表.

编辑:没有排序,基于select/3的一个有点参与的解决方案:

min(L, M) :-
    select(T, L, R),
    ( maplist('<'(T), R), (M = T ; min(R, M)) ).
Run Code Online (Sandbox Code Playgroud)

产量

?- min([2,6,1],X).
X = 1 ;
X = 2 ;
X = 6 ;
false.
Run Code Online (Sandbox Code Playgroud)