このディレクトリの索引
%
% ユーザインターフェイス述語は findmin/3 です。
%
% findmin/3 は集約述語である。findall/3の感覚で第一引数に指定した項の最小値を第三引数に得る。
% 

findmin(V,P,Max) :-
        findall(V,P,L),
        min(L,Max).

min([A|R],X) :-
        min(R,A,X) .

min([],X,X) :- !.
min([A|R],B,X) :-
        A @< B,
        min(R,A,X).
min([_|R],A,X) :-
        A @>= B,
        min(R,A,X).


% 以下はオマケ。
% *** user: findmin / 5 ***
findmin([],P,V,P,V) :- !.
findmin([[P,V]|R1],P1,V1,_最大項,_最大値) :-
        number(V),
        number(V1),
        !,
        V =< V1,
        findmin(R1,P,V,_最大項,_最大値).
findmin([[P,V]|R1],P1,V1,_最大項,_最大値) :-
        number(V),
        number(V1),
        !,
        V < V1,
        findmin(R1,P1,V1,_最大項,_最大値).
findmin([[P,V]|R1],P1,V1,_最大項,_最大値) :-
        V @=< V1,
        findmin(R1,P,V,_最大項,_最大値).
findmin([[P,V]|R1],P1,V1,_最大項,_最大値) :-
        V @> V1,
        findmin(R1,P1,V1,_最大項,_最大値).

% *** user: findmin / 4 ***
findmin(_集約項,_項,_最大項,_最大値) :-
        findall([_項,_集約項],_項,_値ならび),
        _値ならび = [[P,V]|R],
        findmin(_値ならび,P,V,_最大項,_最大値).