このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/6
#  [1] 授業単元:C言語基礎 
#  [2] 問題文(含コード&リンク):http://ime.nu/www.dotup.org/uploda/www.dotup.org1254228.txt.html 
#  
#  [2]任意の文字列から大文字のアルファベットと小文字のアルファベットを抽出する関数
#     extract_alphabet を作成せよ.ただし,第 1 引数で任意の文字列を受け取り,第 2 引数で
#     大文字のアルファベット,第 3 引数で小文字のアルファベットを返すものとする.
#     関数extract_alphabet内ではポインタを使って簡潔かつ高速に文字列を操作すること.
#     この関数内で配列を使用しないこと、意味のないポインタの使い方をしないこと。
#  
#    下の main 関数から関数 extract_alphabet を呼び出し,
#      正常な結果が得られることを確認せよ.
#  

'任意の文字列から大文字のアルファベットと小文字のアルファベットを抽出する関数 extract_alphabet を作成せよ.ただし,第 1 引数で任意の文字列を受け取り,第 2 引数で大文字のアルファベット,第 3 引数で小文字のアルファベットを返すものとする'(_文字列,_大文字アルファベット,_小文字アルファベット) :-
        atom_chars(_文字列,Chars),
        アルファベットを抽出する(Chars,[],[],_大文字アルファベット,_小文字アルファベット).

アルファベットを抽出する([],L1,L2,L1,L2) :- !.
アルファベットを抽出する([Char|R],L1,L2,X,Y) :-
        大文字(Char),
        \+(append(_,[Char|_],L1)),
        アルファベットを抽出する(R,[Char|L1],L2,X,Y),!.
アルファベットを抽出する([Char|R],L1,L2,X,Y) :-
        小文字(Char),
        \+(append(_,[Char|_],L2)),
        アルファベットを抽出する(R,L1,[Char|L2],X,Y),!.
アルファベットを抽出する([_|R],L1,L2,X,Y) :-
        アルファベットを抽出する(R,L1,L2,X,Y).

大文字(Char) :- Char @>= 'A',Char @=< 'Z'.

小文字(Char) :- Char @>= 'a',Char @=< 'z'.