呼び出されるたびに最小変数を返す述語が必要なプロローグプログラムを作成しようとしています。しかし、関数を生成すると、次の最小値が返されるようにする必要があります。例えば:
min([5,3,2,7],B).
B = 2 ;
B = 3 ;
B = 5 ;
B = 7 ;
false.
何か案は?
呼び出されるたびに最小変数を返す述語が必要なプロローグプログラムを作成しようとしています。しかし、関数を生成すると、次の最小値が返されるようにする必要があります。例えば:
min([5,3,2,7],B).
B = 2 ;
B = 3 ;
B = 5 ;
B = 7 ;
false.
何か案は?
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.