このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1354393458/
#  
#  お題:ヴィジュネル暗号で暗号・復号化する関数を作成せよ。
#  ・平文は "programming" とする。
#  ・鍵は任意とする。
#  

ヴィジュネル復号化(_平文,_鍵,_暗号文) :-
        \+(atom(_平文)),
        atom_chars(_暗号文,_暗号文文字ならび),
        atom_chars(_鍵,_鍵文字ならび),
        ヴィジュネル暗号(_平文文字ならび,_鍵文字ならび,_暗号文文字ならび),
        atom_chars(_平文,_平文文字ならび).

ヴィジュネル暗号化(_平文,_鍵,_暗号文) :-
        atom(_平文),
        atom_chars(_平文,_平文文字ならび),
        atom_chars(_鍵,_鍵文字ならび),
        ヴィジュネル暗号(_平文文字ならび,_鍵文字ならび,_暗号文文字ならび),
        atom_chars(_暗号文,_暗号文文字ならび).


ヴィジュネル暗号([],_,[]).
ヴィジュネル暗号([_文字|R1],_鍵文字ならび,[_暗号文字|R3]) :-
        ヴィジュネル暗号の文字変換(_文字,_鍵文字ならび,_一文字回転した鍵文字ならび,_暗号文字),
        ヴィジュネル暗号(R1,_一文字回転した鍵文字ならび,R3).

ヴィジュネル暗号の文字変換(_文字,[_鍵文字|R2],_一文字回転した鍵文字ならび,_暗号文字) :-
        ならびの回転(左方向,_,['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','A'],[_鍵文字|R]),
        nth1(_nth1,[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],_文字),
        nth1(_nth1,[_鍵文字|R],_暗号文字),
        ならびの回転(左方向,1,[_鍵文字|R2],_一文字回転した鍵文字ならび),!.