このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1339338438/533
#  [1] 授業単元: C 
#  [2] 問題文:  
#  アルファベットから成る文字列strをJISコード表にしたがいn文字ずつ 
#  ずらして暗号文cryptogramを作成する関数を作成さなさい。 
#  このような暗号化をシーザー暗号と言う。 
#  数字は数字内で同様にずらすこと。 
#  ただし、それ以外の記号や空白はそのまま無変換とする。  
#  平文とnを引数にとり、暗号文を返す関数を作りなさい。  
#  実行例には、平文を暗号化した場合と、 
#  その暗号文を平文に戻した場合を含めること。 
#  
%
%  数値コードを計算して求めるシーザー暗号
%

シーザー暗号(_n文字ずらし,_平文,_暗号文) :-
        atom_codes(_平文,_文字コードならび),
        文字コードならびを変換する(_n文字ずらし,_文字コードならび,_変換された文字コードならび),
        atom_codes(_暗号文,_変換された文字コードならぴ).

シーザー暗号の平文化(_n文字ずらし,_暗号文,_平文) :-
        _n_1 is _n文字ずらし * (-1),
        シーザー暗号(_n_1,_暗号文,_平文).

文字コードならびを変換する(_,[],[]).
文字コードならびを変換する(_n文字ずらし,[_文字コード|R1],[_変換された文字コード|R2]) :-
        文字コードを変換する(_n文字ずらし,_文字コード,_変換された文字コード),
        文字コードならびを変換する(_n文字ずらし,R1,R2).

文字コードを変換する(_n文字ずらし,_文字コード,_変換された文字コード) :-
        between(65,90,_文字コード),
        _変換された文字コード is ((_文字コード-65+_n文字ずらし) mod 26) + 65,!.
文字コードを変換する(_n文字ずらし,_文字コード,_変換された文字コード) :-
        between(97,122_文字コード),
        _変換された文字コード is ((_文字コード-97+_n文字ずらし) mod 26) + 97,!.
文字コードを変換する(_n文字ずらし,_文字コード,_変換された文字コード) :-
        between(48,57,_文字コード),
        _変換された文字コード is ((_文字コード-48+_n文字ずらし) mod 10) + 48,!.
文字コードを変換する(_,_文字コード,_文字コード).