このディレクトリの索引

相対番号を付加して昇順に整列する(_対象ならび,_昇順に整列したならび) :-
        相対番号を付加する(1,_対象ならび,_相対番号付きならび),
        相対番号を付加されたならびを昇順に整列する(_相対番号付きならび,_昇順に整列した相対番号付きならび),
        相対番号を鍵に対象ならびから昇順に整列したならびを得る(_昇順に整列した相対番号付きならび,_対象ならび,_昇順に整列したならび).

相対番号を付加する(_,[],[]).
相対番号を付加する(N,[A|R1],[[A,N]|R2]) :-
        N_2 is N + 1,
        相対番号を付加する(N_2,R1,R2).

相対番号を付加されたならびを昇順に整列する([],[]).
相対番号を付加されたならびを昇順に整列する([_相対番号を付加した軸要素|_残り要素],_昇順に整列した相対番号付きならび) :-
        昇順分割(_相対番号を付加した軸要素,_残り要素,_軸要素より小さい要素のならび,_軸要素に等しいか大きい要素ならび),
        相対番号を付加されたならびを昇順に整列する(_軸要素より小さい要素のならび,_昇順に整列した軸要素より小さいならび),
        相対番号を付加されたならびを昇順に整列する(_軸要素に等しいか大きいならび,_昇順に整列した軸要素に等しいか大きいならび),
        append(_昇順に整列した軸要素より小さいならび,[_相対番号を付加した軸要素|_昇順に整列した軸要素に等しいか大きいならび],_昇順に整列した相対番号付きならび).

昇順分割(_,[],[],[]).
昇順分割(_軸要素,[_要素|R1],[_要素|R2],R3) :-
        _要素 @< _軸要素,
        昇順分割(_軸要素,R1,R2,R3).
昇順分割(_軸要素,[_要素|R1],R2,[_要素|R3]) :-
        _要素 @>= _軸要素,
        昇順分割(_軸要素,R1,R2,R3).

相対番号を鍵に対象ならびから昇順に整列したならびを得る([],_,[]).
相対番号を鍵に対象ならびから昇順に整列したならびを得る([[_,_nth1]|R1],_対象ならび,[_対象ならび要素|R2]) :-
        nth1(_nth1,_対象ならび,_対象ならび要素),
        相対番号を鍵に対象ならびから昇順に整列したならびを得る(R1,_対象ならび,R2