このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1322562648/361
#  [1] 授業単元: プログラミングC (ポインタ、文字列) 
#  [2] 文字列を後ろから逆に表示する(例えば"ABC"を受け 
#  取ったら"CBA"と表示する)関数 
#  void put_rstring(const char *st) 
#  を,添字演算子[] を使わずに作成せよ 
#  

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

文字列を後ろから逆に表示する(_文字列) :-
        atom_chars(_文字列,Chars),
        ならびを後ろから逆に表示する(Chars).

ならびを後ろから逆に表示する([]).
ならびを後ろから逆に表示する([A|R]) :-
        ならびを後ろから逆に表示する(R),
        put_char(A).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

文字列を後ろから逆に表示する(_文字列) :-
        sub_atom(_文字列,0,_文字列の長さ_1,1,_),
        for(0,N,_文字列の長さ_1),
        sub_atom(_文字列,_,1,N,_文字),
        put_char(_文字),
        N = _文字列の長さ_1.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

文字列を後ろから逆に表示する(_文字列) :-
        atom_chars(_文字列,Chars),
        reverse(Chars,Chars2),
        atom_chars(_反転した文字列,Chars2),
        writef('%t',[_反転した文字列]).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

文字列を後ろから逆に表示する(_文字列) :-
        sub_atom(_文字列,0,_文字列の長さ_1,1,_),
        findall(_文字,(
                    for(0,N,_文字列の長さ_1),
                    sub_atom(_文字列,_,1,N,_文字)),
               Chars),
        atom_chars(_反転した文字列,Chars),
        writef('%t',[_反転した文字列]).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

文字列を後ろから逆に表示する(_文字列) :-
        atom_chars(_文字列,Chars),
        rappend(L0,[_文字|_],Chars),
        writef('%t',[_文字]),
        L0 = [].

rappend(L0,[X|R],L) :-
        rappend_1(L,L0,X,[],R).

rappend_1(L,L0,X,R1,R) :-
        append(L1,[A],L),
        rappend_2(L1,L0,A,X,R1,R).

rappend_2(L1,L1,A,A,R,R).
rappend_2(L1,L0,B,X,R1,R) :-
        rappend_1(L1,L0,X,[B|R1],R).