このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1328276597/190
#  [1] 授業単元:C言語 
#  [2] リスト構造を使ったアドレス帳の作成。  
#  リスト構造で管理し次の機能が実現できること。 
#  •追加(データの新規登録) 
#  •削除(任意のデータの削除) 
#  •探索(任意のデータの詳細表示) 
#  •一覧表示 
#  •データのソー扱うデータは氏名、住所、電話番号、eメールアドレス 
#  http://ime.nu/ideone.com/lMgd3 
#  

:- dynamic(アドレス帳/1).

追加(_氏名,_住所,_電話番号,_eメールアドレス) :-
        retract(アドレス帳(_追加前のアドレス帳)),
        追加(_氏名,_住所,_電話番号,_eメールアドレス,_追加前のアドレス帳),!.
追加(_氏名,_住所,_電話番号,_eメールアドレス) :-
        asserta(アドレス帳([[_氏名,_住所,_電話番号,_eメールアドレス]]).

追加(_氏名,_住所,_電話番号,_eメールアドレス,_現在のアドレス帳) :-
        member([_氏名,_住所,_電話番号,_eメールアドレス],_現在のアドレス帳),
        asserta(アドレス帳(_現在のアドレス帳)),
        writef('追加指定された %t,%t,%t,%t,%t は既に登録されています\n',[_氏名,_住所,_電話番号,_eメールアドレス]),!.
追加(_氏名,_住所,_電話番号,_eメールアドレス,_追加前のアドレス帳) :-
        asserta(アドレス帳([[_氏名,_住所,_電話番号,_eメールアドレス]|_追加前のアドレス帳]).

削除(_氏名,_住所,_電話番号,_eメールアドレス) :-
        retract(アドレス帳(_削除前のアドレス帳)),
        削除(_氏名,_住所,_電話番号,_eメールアドレス,_削除前のアドレス帳),!.
削除(_氏名,_住所,_電話番号,_eメールアドレス) :-
        asserta(アドレス帳([])).

削除(_氏名,_住所,_電話番号,_eメールアドレス,_削除前のアドレス帳) :-
        append(L0,[[_氏名,_住所,_電話番号,_eメールアドレス]|R],_削除前のアドレス帳),
        append(L0,R,_削除後のアドレス帳),
        asserta(アドレス帳(_削除後のアドレス帳)),!.
削除(_氏名,_住所,_電話番号,_eメールアドレス,_現在のアドレス帳) :-
        asserta(アドレス帳(_現在ののアドレス帳)),
        writef('指定された %t,%t,%t,%t で削除するべきアドレスは発見できませんでした\n',[_氏名,_住所,_電話番号,_eメールアドレス,_現在のアドレス帳]).

探索(_鍵項目ならび) :-
        list(_鍵項目ならび),
        探索組生成(_鍵項目ならび,_組),
        組表示(_組).        

探索(_鍵項目,_鍵の値) :-
        検索組生成(_鍵項目,_鍵の値,_組),
        組表示(_組).

一覧表示 :-
        アドレス帳(_アドレス帳),
        writef('%20r,%32r,%14r,%64l\n',[氏名,住所,電話番号,eメールアドレス]),
        append(_,[[_氏名,_住所,_電話番号,_eメールアドレス]|R],_アドレス帳),
        writef('%20r,%32r,%14r,%64l\n',[_氏名,_住所,_電話番号,_eメールアドレス]),
        R = [].

探索組生成([],_).
探索組生成([[_鍵,_鍵の値]|R],_組) :-
        検索組生成(_鍵,_鍵の値,_組),
        探索組生成(R,_組).

検索組生成(氏名,_鍵の値,[_鍵の値,_,_,_]).
検索組生成(住所,_鍵の値,[_,_鍵の値,_,_]).
検索組生成(電話番号,_鍵の値,[_,_,_鍵の値,_]).
検索組生成(eメールアドレス,_鍵の値,[_,_,_,_鍵の値]).

組表示(_組) :-
        アドレス帳(_アドレス帳),
        append(_,[_組|R],_アドレス帳),
        writef('%t,%t,%t,%t\n',_組),
        R = [].