このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/358
#  [1] 授業単元: プログラミング演習 
#  [2] 問題文(含コード&リンク): アルファベットと空白からなる文字列を処理する以下のような関数を作成せよ。なお各関数は処理が成功したときに1、失敗したときに0を返すものとする。 
#   
#  (3) 単語(空白で区切られた文字)の順序を反転する関数int reverse_word(char *s)を作成せよ。例: 
#  char s[] = "abc de f ghi"; 
#  reverse_word(s); 
#  printf("%s¥n", s); // -> "ghi f de abc" 
#  (ヒント: (1)や(2)で作った関数が応用できる?) 
#   
#  

'アルファベットと空白からなる文字列の単語(空白で区切られた文字)の順序を反転するただし区切り形式は現在の順序通り維持する'(_文字列,_反転した文字列) :-
        atom_chars(_文字列,Chars),
        '単語(空白で区切られた文字)の順序を反転する'(Chars,[],[],L4),
        concat_atom(L6,_反転した文字列).        

'単語(空白で区切られた文字)の順序を反転する'([],L2,L2,[]) :- !.
'単語(空白で区切られた文字)の順序を反転する'(L1,L2,L3,[A|R4]) :-
        先頭から区切り文字を切り取る(L1,LX,R1),
        concat_atom(LX,A),
        '単語(空白で区切られた文字)の順序を反転する'(R1,L2,L3,R4).
'単語(空白で区切られた文字)の順序を反転する'(L1,L2,L3,[V|R4]) :-
        先頭から区切り文字までを切り取る(L1,LX,R1),
        concat_atom(LX,A),
        '単語(空白で区切られた文字)の順序を反転する'(R1,[A|L2],[V|L3],R4).

先頭から区切り文字を切り取る(L1,LX,R) :-
        append(L0,R,L1),
        \+(R = [' '|_]),
        \+(L0 = []),
        all(L0,' '),!.
先頭から区切り文字を切り取る(L1,L1,[]) :-
        all(L1,' '),!.

先頭から区切り文字までを切り取る(L1,LX,R) :-
        append(L0,R,L1),
        R = [' '|_],
        \+(member(' ',L0)),!.
先頭から区切り文字までを切り取る(L1,L1,[]) :-
        \+(member(' ',L1)),!.