このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/358
#  [1] 授業単元: プログラミング演習 
#  [2] 問題文(含コード&リンク): アルファベットと空白からなる文字列を処理する以下のような関数を作成せよ。なお各関数は処理が成功したときに1、失敗したときに0を返すものとする。 
#   
#  (1) 先頭からインデックスpで指定される文字までを反転させる関数int reverse(char *s, int p)を作成せよ。例: 
#  char s[] = "abc defg"; 
#  reverse(s, 3); 
#  printf("%s¥n", s); // -> " cbadefg" 
#   
#  (2) インデックスpとqで指定される範囲の文字を反転させる関数int reverse2(char *s, int p, int q)を作成せよ。例: 
#  char s[] = "ab cdefg"; 
#  reverse2(s, 4, 7); 
#  printf("%s¥n", s); // -> "ab cgfed" 
#  (ヒント: (1)で作った関数が応用できる?) 
#   
#  (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)で作った関数が応用できる?) 
#   
#  

'アルファベットと空白からなる文字列の先頭からインデックスpで指定される文字までを反転させる。'(_アルファベットと空白からなる文字列,_p,_反転した文字列) :-
        atom_chars(_アルファベットと空白からなら文字列,Chars),
        先頭からインデックスpで指定される文字までを反転させる(Chars,_p,Chars2),
        atom_chars(_反転した文字列,Chars2).

先頭からインデックスpで指定される文字までを反転させる(Chars,_p,Chars2) :-
        length(L0,_p),
        append(L0,R,Chars),
        reverse(L0,L0_2),
        append(L0_2,R,Chars2).