このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1263824755/307
#  [1] Cプログラミング入門:  
#  [2] http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10460.txt 
#  
'ソート方法 A を用いて配列 COM,MAN の要素をそれぞれ小さい順に並べる'(L1,L2) :-
    ソート方法A(L1,L2).

ソート方法A(L1,L2) :-
    '作業用のならびとして、要素が100 個の変数であるならびWorkを用意する'(Work),
    'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'(L1,Work),
    '全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(0,L1,L2).

'作業用のならびとして、要素が100 個の変数であるならびWorkを用意する'(Work) :-
    length(Work,100).

'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'([],Work) :- !.
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'([N|R1],Work) :-
    M is N + 1,
    list_nth(M,Work,1),
    'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'(R1,Work),!.

'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(_,[],[]) :- !.
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(N,[A|R1],[N|R2]) :-
    \+(var(A)),
    N2 is N + 1,
    '全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(N2,R1,R2),!.
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(N,[V|R1],L2) :-
    var(V),
    N2 is N + 1,
    '全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(N2,R1,L2).