このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1288531658/218
#  [1] 授業単元:コンピュータプログラミング 
#  [2] 問題文(含コード&リンク): 
#  以下のアルゴリズムを使用しプログラムを作成せよ 
#  <プログラム概要> 
#  ・256文字以内で文字列を入力させる 
#     ※半角文字のみで可。入力制御不要 
#  ・画面に入力された文字列を表示 
#  文字列を前・後(中央折り返し)で反転 
#     ※シーゲンゴゴーゲンシ 
#     ※ジュギョウウョギュジ 
#  ・入力文字列と反転後の文字列を表示 
#   
#  <アルゴリズム> 
#  .如璽親力用と文字配列を宣言 
#  入力用と出力用の文字列を宣言 
#  J源列は文字列操作関数を使用 
#  そ侘詫冓源配列の先頭アドレスをポインタに設定 
#  ズ能文字一の中身を出力用文字配列の現在位置に代入 
#  Π聞漾入力用は前方向、出力用は後方へポインタをずらす 
#  Ы侘詫冉枸鵑虜能位置へ文字列終端子を代入 
#  

'256文字以内で文字列(半角文字のみで可。入力制御不要)を入力させた上で、その文字列を中央から二分割し、それぞれの部分を反転して結合した文字列を表示する' :-
        '256文字以内で文字列を入力させる(半角文字のみで可。入力制御不要)'(_入力された文字列),
        '画面に入力された文字列を表示'(_入力された文字列),
        '文字列を前・後(中央折り返し)で反転'(_入力された文字列,_反転後の文字列),
        入力文字列と反転後の文字列を表示(_入力された文字列,_反転後の文字列).

'256文字以内で文字列を入力させる(半角文字のみで可。入力制御不要)'(_文字列) :-
        get_line(_文字列),
        半角のみで可(_文字列),
        atom_length(_文字列,_文字列の長さ),
        _文字列の長さ =< 256.
'256文字以内で文字列を入力させる(半角文字のみで可。入力制御不要)'(_文字列) :-
        write('文字列長が256文字を越えました。再入力をお願いします。\n'),
        '256文字以内で文字列を入力させる(半角文字のみで可。入力制御不要)'(_文字列).

半角のみで可(_文字列) :-
        全角文字を含む(_文字列),!.
半角のみで可(_文字列) :-
        全角文字を含まない(_文字列),!.

'画面に入力された文字列を表示'(_入力された文字列) :-
        write_formatted('%t\n',[_入力された文字列]).

'文字列を前・後(中央折り返し)で反転'(_文字列,_反転された文字列) :-        
        文字列から文字ならびを得る(_文字列,_文字ならび),
        中央で分割する(_文字ならび,_前半部,_中央部,_後半部),
        前半・後半部分をそれぞれ反転する(_前半部,_後半部,_反転した前半部,_反転した後半部),
        反転した二つの部分と中央部を結合する(_反転した前半部,_中央部,_反転した後半部,_反転した文字ならび),
        文字ならびから文字列を得る(_反転した文字ならび,_反転された文字列).

文字列から文字ならびを得る(_文字列,_文字ならび) :-
        atom_chars(_文字列,_文字ならび).

文字列ならびから文字列を得る(_文字ならび,_文字列) :-
        atom_chars(_文字列,_文字ならび).

中央で分割する(_文字ならび,_前半部,[],_後半部) :-
        append(_前半部,_後半部,_文字ならび),
        length(_前半部,_長さ),
        length(_後半部,_長さ),!.
中央で分割する(_文字ならび,_前半部,[_文字],_後半部) :-
        append(_前半部,[_文字|_後半部],_文字ならび),
        length(_前半部,_長さ),
        length(_後半部,_長さ),!.

前半・後半部分をそれぞれ反転する(_前半部,_後半部,_反転された前半部,_反転された後半部) :-
        reverse(_前半部,_反転された前半部),
        reverse(_後半部,_反転された後半部).

反転した二つの部分と中央部を結合する(_反転された前半部,_中央部,_反転された後半部,_反転された文字ならび) :-
        append(_反転された前半部,_中央部,_反転された後半部,_反転された文字ならび).

入力文字列と反転後の文字列を表示(_入力された文字列,_反転後の文字列) :-
        write_formatted('入力文字列は   %t\n反転後の文字列は %t\n',[_入力された文字列,_反転後の文字列]).

全角文字を含む(_文字列) :-
        atom_codes(_文字列,_文字コードならび),
        member(_文字コード,_文字コードならび),
        _文字コード >= 256,!.

全角文字を含まない(_文字列) :-
        \+(全角文字を含む(_文字列)),!.