09/06/07 16:43:57
% Prolog >>105とは対照的なプログラム
t104(Atom,AtomX) :-
findall([0,N],for(97,N,122),L),
to_lower(Atom,Atom2),
atom_codes(Atom2,L1),
t104_2(L1,L,L2),
sort(L2,L3),
t104_3(L3,[],L4),
atom_codes(AtomX,L4),!.
t104_2([],X,X).
t104_2([A|R1],L,X) :-
t104_3(A,L,L1),
t104_2(R1,L1,X).
t104_3(97,[[S,N]|R],[[S1,N]|R]) :-
S1 is S+1.
t104_3(N,[U|R1],[U|R2]) :-
N > 97,
M is N-1,
t104_3(M,R1,R2).
t104_4([],X,X).
t104_4([[0,_]|R1],Y,X) :-
t104_4(R1,Y,X).
t104_4([[C,N]|R1],Y,X) :-
C > 0,
t104_4(R1,[N|Y],X).