このディレクトリの索引
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で指定される文字からqで指定される文字までを反転させる。'(_アルファベットと空白からなる文字列,_p,_q,_反転した文字列) :-
        atom_chars(_アルファベットと空白からなる文字列,Chars),
        インデックスpとqで指定される範囲の文字を反転させる(Chars,_p,_q,Chars2),
        atom_chars(_反転した文字列,Chars2).

インデックスpとqで指定される範囲の文字を反転させる(Chars,_p,_q,Chars2) :-
        'p~q区間を切り出す'(Chars,_p,_q,L01,Chars1,R),
        'p~q区間を反転させる'(Chars1,Chars1_1),
        append([L01,Chars1_1,R],Chars2).

'p~q区間を切り出す'(Chars,_p,_q,L01,Chars1,R) :-
        length([_|L01],_p),
        length(L02,_q),
        append(L01,Chars1,L02),
        append(L02,R,Chars).

'p~q区間を反転させる'(Chars1,Chars1_1) :-
        reverse(Chars1,Chars1_1).