10/01/20 22:14:25
>>333
% Prolog
'与えられた二つのリストに含まれる文字の並びを辞書式順序(※)で比較し、第一のリストの方が小さければ負の値、大きければ正の値、等しければ0を返す'(_文字リスト_1,_文字リスト_2,_返り値) :-
compare(_文字リスト_1,_文字リスト_2,_返り値).
compare([],[],0).
compare([],[_|_],-1).
compare([_|_],[],1).
compare([A|_],[B|_],-1) :-
char_code(A,CodeA),CodeA >= 65,CodeA =< 90,
char_code(B,CodeB),CodeB >= 97,CodeB =< 122,
CodeC is CodeB - 32,
CodeC >= CodeA,!.
compare([A|_],[B|_],1) :-
char_code(A,CodeA),CodeA >= 97,CodeA =< 122,
char_code(B,CodeB),CodeB >= 65,CodeB =< 90,
CodeC is CodeA - 32,
CodeC =< CodeA,!.
compare([A|_],[B|_],-1) :- A @< B,!.
compare([A|_],[B|_],1) :- A @> B,!.
compare([A|R1],[A|R2],X) :-
compare(R1,R2,X).