2

呼び出されるたびに最小変数を返す述語が必要なプロローグプログラムを作成しようとしています。しかし、関数を生成すると、次の最小値が返されるようにする必要があります。例えば:

min([5,3,2,7],B).
B = 2 ;
B = 3 ;
B = 5 ;
B = 7 ;
false.

何か案は?

4

2 に答える 2

5
min(L, Min) :- sort(L, S), member(Min, S).

あなたのサンプルデータに対して行います。より一般的には、setof /3 を使用すると、一般的な目標に対するソリューションのソートされたリストを作成できます。

edit : ソートなし、 select /3に基づくやや複雑なソリューション:

min(L, M) :-
    select(T, L, R),
    ( maplist('<'(T), R), (M = T ; min(R, M)) ).

収量

?- min([2,6,1],X).
X = 1 ;
X = 2 ;
X = 6 ;
false.
于 2013-06-04T08:49:18.350 に答える