このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1339338438/849
#  [1] 授業単元: プログラミング 
#  [2] 問題文:  
#  1文字を引数として受け取り、AならばZ,BならばY,aならばz,bならばy,0ならば9,1ならば8 
#  というように入れ替えた文字を戻り値とする関数をsymmetry()という名前で作成する。 
#  キーボードから80文字以内の英文を1行入力し、1行の全ての文字をsymmetry()で変換した 
#  文字列を1行に表示する。同じ操作を更にもう一度繰り返し、結果的に入力された英文と 
#  同じ文字列が表示されるようにする。 
#  例:I was born in 1956.と打ち込んだ場合、R dzh ylim rm 8043.と表示されるようにする。 
#   

'キーボードから80文字以内の英文を1行入力し、1行の全ての文字をsymmetry述語で変換した文字列を1行に表示する。' :-
        'キーボードから80文字以内の英文を1行入力し、'(_80文字以内の文字列),
        '1行の全ての文字をsymmetry述語で変換した文字列を'(_80文字以内の文字列,_変換した文字列),
        表示する(_変換した文字列).

'キーボードから80文字以内の英文を1行入力し、'(_80文字以内の文字列) :-
        get_line(_文字列),
        '80文字以内の'(_文字列,_80文字以内の文字列).

'80文字以内の'(_文字列,_80文字以内の文字列) :-
        sub_atom(_文字列,0,80,_,_80文字以内の文字列),!.
'80文字以内の'(_文字列,_文字列).

'1行の全ての文字をsymmetry述語で変換した文字列を'(_80文字以内の文字列,_変換した文字列) :-
        findall(_暗号文字,(
                    sub_atom(_80文字以内の文字列,_,1,_,_文字),
                    symmetry(_文字,_暗号文字)),
                _変換した文字ならび),
        atom_chars(_変換した文字列,_変換した文字ならび).

表示する(_変換した文字列) :-
        writef('%t\n',[_変換した文字列]).

symmetry(_文字,_暗号文字) :-
        暗号文字へずらす(_文字,_暗号文字),!.
summetry(_文字,_文字).

暗号文字へずらす(_文字,_暗号文字) :-
        文字種(_,_文字コード下限,_文字コード上限,L),
        nth0(_nth0,L,_文字),
        _シフト数 is _nth0 + (_文字コード上限 - _文字コード下限 + 1) // 2,
        ならびの回転(左方向,_シフト数,L,[_暗号文字|_]),!.

文字種(英小文字,97,122,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]).
文字種(英大文字,65,90,['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']).
文字種(数字,48,57,['0','1','2','3','4','5','6','7','8','9']).