このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1305867431/16
#  [1]授業単元:課題  
#  [2]問題文:文字列を読み込み,各文字をアルファベットの辞書順にn文字循環シフトして出力するプログラム.  
#  ただし'b'が'a'+1であると仮定してはならない. 
#  整数 > 5 
#  変換前の文字列 > ayzfvwhbpqrcegiklmnjostdux 
#  変換後の文字列: fdekabmguvwhjlnpqrsotxyizc 
#   
#  

文字列を読み込み,各文字をアルファベットの辞書順にn文字循環シフトして出力する :-
        文字列を読み込み(_文字列),
        各文字をアルファベットの辞書順にn文字循環シフトして(_文字列,_変換された文字列),
        出力する(_変換された文字列).

文字列を読み込み(_文字列) :-
        write('英小文字文字列を入力してください : '),
        get_line(_文字列),
        文字列診断(_文字列),!.
文字列を読み込み(_文字列) :- 文字列を読み込み(_文字列).

文字列診断(_文字列) :-
        atom_chars(_文字列,Chars),
        すべてが英小文字(Chars),!.
文字列診断(_文字列) :-
        write('入力された %t には英小文字以外の文字が存在します。再入力をお願いします。\n'),
        fail.

すべてが英小文字([]).
すべてが英小文字([_文字|R]) :-
        member(_文字,[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]),
        すべてが英小文字(R).

各文字をアルファベットの辞書順にn文字循環シフトして(_文字列,_変換された文字列) :-
        atom_chars(_文字列,Chars),
        文字ならびの各文字をアルファベットの辞書順にn文字循環シフトして(Chars,Chars2),
        concat_atom(Chars2,_変換された文字列).

文字ならびの各文字をアルファベットの辞書順にn文字循環シフトして([],[]).
文字ならびの各文字をアルファベットの辞書順にn文字循環シフトして([_文字|R1],[_変換された文字|R2]) :-
        英小文字循環シフト(_文字,_変換後文字),
        文字ならびの各文字をアルファベットの辞書順にn文字循環シフトして(R1,R2).

英小文字循環シフト(_変換前文字,_変換後文字) :-
        ならびの回転(左方向,1,[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],[_変換前文字|R]),
        ならびの回転(左方向,5,[_変換前文字|R],[_変換後の文字|_]).