このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/9
#  C言語プログラミング  
#  [2] あるlistを読み込みアルファベット順に並び替 え標準出力するプログラムを作成せよ。 
#   [3.1] Windows vista  
#  [3.2] gcc  
#  [3.3] 言語: C  
#  [4] 期限: 2011年8月2日  
#  [5] その他の制限: strcpyを使ってはいけないという制限があるんですが
#  一度strcpy作ってから変 えてみたんですがいまいち分かりません、
#  どうすればいいでしょうか?
#  http://ime.nu/codepad.org/LbBL9T3T 
# 
# 

'あるlistを読み込みアルファベット順に並び替え標準出力する' :-
        あるlist(_list),
        アルファベット順に並び替え(_list,_整列したlist),
        標準出力する(_整列したlist).

アルファベット順に並び替え([],[]).
アルファベット順に並び替え([_基礎語彙|_list],_整列したlist) :-
        辞書順分割(_基礎語彙,_list,_小さいならび,_等しいか大きいならび),
        アルファベット順に並び替え(_小さいならび,_list_2),
        アルファベット順に並び替え(_等しいか大きいならび,_list_3),
        append(_小さいならび,[_基礎語彙|_等しいか大きいならび],_整列したlist).

辞書順分割(_,[],[],[]).
辞書順分割(_基礎語彙,[_語彙|R1],[_語彙|R2],R3) :-
        辞書順で比較(_語彙,_基礎語彙,小さい),
        辞書順分割(_基礎語彙,R1,R2,R3),!.
辞書順分割(_基礎語彙,[_語彙|R1],R2,[_語彙|R3]) :-
        辞書順で比較(_語彙,_基礎語彙,等しいか大きい),
        辞書順分割(_基礎語彙,R1,R2,R3),!.

辞書順で比較(_語彙1,_語彙2,_比較) :-
        atom_codes(_語彙1,Codes1),
        atom_codes(_語彙2,Codes2),
        辞書順コード比較(Codes1,Codes2,_比較).

辞書順コード比較([],[_|_],小さい) :- !.
辞書順コード比較([_|_],[],等しいか大きい) :- !.
辞書順コード比較([A|R1],[B|R2],小さい) :-
        A >= 65,
        A =< 90,
        B >= 97,
        B =< 122,
        A =< B - 32,!.
辞書順コード比較([A|R1],[B|R2],等しいか大きい) :-
        A >= 65,
        A =< 90,
        B >= 97,
        B =< 122,
        A > B - 32,!.
辞書順コード比較([A|R1],[B|R2],小さい) :-
        A >= 97,
        A =< 122,
        B >= 65,
        B =< 90,
        A - 32 < B,!.
辞書順コード比較([A|R1],[B|R2],等しいか大きい) :-
        A >= 97,
        A =< 122,
        B >= 65,
        B =< 90,
        A - 32 >= B,!.
辞書順コード比較([A|R1],[A|R2],_比較) :-
        辞書順コード比較(R1,R2,_比較).
辞書順コード比較([A|R1],[B|R2],小さい) :-
        A < B,!.
辞書順コード比較([A|R1],[B|R2],等しいか大きい) :-
        A >= B,!.