このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1248012902/632
#  【 課題 】 
#  氏名(string)、ふりがな(string)、携帯番号(string)、メールアドレス(string)  
#  をフィールドとして持つクラスAddressBookを定義せよ。  
#  クラス内に、ふりがなで辞書順に並べ替えるためのcompareToを定義せよ。  
#  外部に,TelNoSortという、電話番号(文字列)を辞書順に並び変えるためのメソッドを  
#  作成せよ。  
#  メイン・プログラムで、AddressBookクラスの配列(ArrayList)を定義し、  
#  以下の動作をおこなうプログラムを作れ。  
#  3人分のデータをキーボードから入力し、リストに代入する。  
#  ・配列に代入されたデータをふりがな順に、見やすく出力する。  
#  ・配列に代入されたデータを電話番号順に、見やすく出力する。  
#  入力、出力には、for文を使うこと。  
# 

'3人分のデータをキーボードから入力し、リストに得る。ふりがな順と電話番号順に見やすく出力する' :-
        '3人分のデータをキーボードから入力し'(1),
        compareTo(_ふりがな順ならび),
        write_formatted('整列鍵は%tです\n\n',[ふりがな]),
        見やすく出力する(_ふりがな順ならび),
        'TelNosort'(_携帯番号順ならび),
        write_formatted('整列鍵は%tです\n\n',[携帯番号]),
        見やすく出力する(_携帯番号順ならび).

'3人分のデータをキーボードから入力し'(N) :- N > 3,!.
'3人分のデータをキーボードから入力し'(N1) :-
        write('氏名 ふりがな 携帯番号 メールアドレス を空白で区切って入力しなさい : '),
        get_line(Line),
        split([' '],L),
        '3人分のデータをキーボードから入力診断(Line,L),
        N2 is N1 + 1,
        '3人分のデータをキーボードから入力し'(N2),!.
'3人分のデータをキーボードから入力し'(N1) :-
        '3人分のデータをキーボードから入力し'(N1).

'3人分のデータをキーボードから入力診断(_,[_氏名,_ふりがな,_携帯番号,_メールアドレス]) :-
        氏名入力診断(_氏名),
        ふりがな入力診断(_ふりがな),
        携帯電話入力診断(_携帯電話),
        メールアドレス入力診断(_メールアドレス),
        assertz('AddressBook'(_氏名,_ふりがな,_携帯番号,_メールアドレス)),!.
'3人分のデータをキーボードから入力診断(Line,_) :-
        write_formatted('入力された %t は適切なものではありません。再入力をお願いします。\n',[Line]),!,
        fail.

氏名入力診断(_氏名) :- true.

ふりがな入力診断(_ふりがな) :- true.

携帯電話入力診断(_携帯電話) :- true.

メールアドレス入力診断(_メールアドレス) :- true.

compareTo(_ふりがな順ならび) :-
        findall([_ふりがな,_氏名,_ふりがな,_携帯番号,_メールアドレス],'AddressBook'(_氏名,_ふりがな,_携帯番号,_メールアドレス),LL1),
        sort(LL1,LL2),
        findall(L,append(_,[[_|L]|R],LL2),_ふりがな順ならび).

'TelNoSort'(_携帯番号順ならび) :-
        findall([_電話番号,_氏名,_ふりがな,_携帯番号,_メールアドレス],'AddressBook'(_氏名,_ふりがな,_携帯番号,_メールアドレス),LL1),
        sort(LL1,LL2),
        findall(L,append(_,[[_|L]|R],LL2),_電話番号順ならび).

見やすく出力する([]) :- !.
見やすく出力する([[_氏名,_ふりがな,_携帯番号,_メールアドレス]|R]) :-
        write_formatted('氏名=%t\nふりがな=%t\n携帯番号=%t\nメールアドレス=%t\n\n',[_氏名,_ふりがな,_携帯番号,_メールアドレス]),
        見やすく出力する(R).