10/01/29 07:58:33
>>483
% Prolog 3: ソート方法AはPrologのリスト(ならび)仕様に書き換えました。効率は大変悪い。
'ソート方法 A を用いて配列 COM,MAN の要素をそれぞれ小さい順に並べる'(L1,L2) :-
ソート方法A(L1,L2).
ソート方法A(L1,L2) :-
'作業用のならびとして、要素が100 個の変数であるならびWorkを用意する'(Work),
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'(L1,Work),
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(L1,L2).
'作業用のならびとして、要素が100 個の変数であるならびWorkを用意する'(Work) :-
length(Work,100).
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'([],Work) :- !.
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'([N|R1],Work) :-
list_nth(N,Work,1),
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'(R1,Work),!.
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'([],[]) :- !.
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'([A|R1],[A|R2]) :-
\+(var(A)),
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(R1,R2),!.
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'([V|R1],L2) :-
var(V),
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(R1,L2).