このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1305867431/41
#  [1] 授業単元: Cプログラミング2 
#  [2] 問題文(含コード&リンク): キーボードより文字列aと文字列bを入力し、 
#  比較する(どちらが辞書並びで先かを表示する)プログラムを作りなさい。 
#  但し、strcmp関数を用いてはならない。 
#  

'キーボードより文字列aと文字列bを入力し、比較する(どちらが辞書並びで先かを表示する)' :-
        'キーボードより文字列aと文字列bを入力し'(_a,_b),
        '文字列aと文字列bをそれぞれコードならびに変換して'(_a,_b,Codes_a,Codes_b),
        辞書順用にコード列を変換する(Code_a,Code_a_2),
        辞書順用にコード列を変換する(Code_b,Code_b_2),
        '比較する(どちらが辞書並びで先かを表示する)'(_文字列a,Code_a_2,_文字列b,Cod_b_2).

'キーボードより文字列aと文字列bを入力し'(_a,_b) :-
        get_line(_文字列a),
        get_line(_文字列b).

'文字列aと文字列bをそれぞれコードならびに変換して'(_a,_b,Codes_a,Codes_b) :-
        atom_codes(_文字列a,Codes_a),
        atom_codes(_文字列b,Codes_b).

辞書順用にコード列を変換する([],[]) :- !.
辞書順用にコード列を変換する([A|R1],[B|R2]) :-
        英大文字は小文字に変換した上で10倍する(A,B),
        辞書順用にコード列を変換する(R1,R2),!.
辞書順用にコード列を変換する([A|R1],[B|R2]) :-
        その他は10倍した上で1を足す(A,B),
        辞書順用にコード列を変換する(R1,R2),!.

英大文字は小文字に変換した上で10倍する(A,B) :-
        between(65,90,A),
        B is (A + 32) * 10.

その他は10倍した上で1を足す(A,B) :-
        B is A * 10 + 1.

'比較する(どちらが辞書並びで先かを表示する)'(_文字列a,Code_a_2,_文字列b,Cod_b_2) :-
        Code_a_2 @=< Code_b_2,
        writef('%t %t の順\n',[_文字列a,_文字列b]),!.
'比較する(どちらが辞書並びで先かを表示する)'(_文字列a,Code_a_2,_文字列b,Cod_b_2) :-
        Code_a_2 @> Code_b_2,
        writef('%t %t の順\n',[_文字列b,_文字列a]),!.