?- swipl c153-868#
このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/868
#  [1] 授業単元:プログラミング実習 
#  [2] 問題文(含コード&リンク):リンク先上部に問題文があります。 
#  http://ime.nu/ideone.com/YYmfZ 
#  
#  32個の整数の集合Setの最大値MMaxと最小値mminを求めるプログラムを再帰法で
#  作ってみよう。
#  集合を2つに分けてそれぞれの最大最小を求めまた2つに分けていく
#  

'32個の整数の集合Setの最大値MMaxと最小値mminを求めるプログラムを再帰法で作ってみよう。集合を2つに分けてそれぞれの最大最小を求めまた2つに分けていく'(_32個の整数の集合,_最大値,_最小値) :-
        '32個の整数集合の最大値'(_32個の整数の集合,_最大値),
        '32個の整数集合の最小値'(_32個の整数の集合,_最小値).

'32個の整数集合の最大値'(_32個の整数の集合,_最大値) :-
        append(L1,[_最大値|L2],_32個の整数の集合),
        全ての要素が最大値より小さい(_最大値,L2),
        全ての要素が最大値より小さい(_最大値,L1).


'32個の整数集合の最小値'(_32個の整数の集合,_最大値) :-
        append(L1,[_最小値値|L2],_32個の整数の集合),
        全ての要素が最小値より小さい(_最小値,L2),
        全ての要素が最小値より小さい(_最小値,L1).


全ての要素が最大値より小さい(_,[]).
全ての要素が最大値より小さい(_最大値,[_要素|R]) :-
        _要素 @< _最大値,
        全ての要素が最大値より小さい(_最大値,R).

全ての要素が最小値より大きい(_最小値,[]).
全ての要素が最小値より大きい(_最小値,[_要素|R]) :-
        _要素 @> _最小値,
        全ての要素が最小値より大きい(_最小値,R).

%  
%  このプログラムは 「32個の整数集合の」と述語名を修飾することで、
%  利用者に強いメッセージを与えることの実験。
%  このような固有の問題に対象を狭める述語名を採用することで、
%  汎用的な用途に使えなくすることも述語名の大きな役割だ。
%  
%  一方で「全ての要素が最小値より大きい」は汎用性の強い述語だ。
%  
%  述語が汎用的であることはそれだけ思い込みによるエラーが入り込みやすいと
%  いうことであり、エラーの少ないコードを志向するならば、
%  述語定義に於いて、一般概念に頼らず述語名によって固有の領域に定義を
%  狭めることは極めて有効なことである。
%