このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/307
#  【質問テンプレ】 
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク):http://ime.nu/iup.2ch-library.com/i/i0478374-1321368771.jpg 
#  
#  1. (データの新規追加) 引数を順に名前、電話番号、学籍番号を表す配列 name phone number を用いて実装せよ
#  2. (データ項目の削除) 引数で指定されたデータ項目と合致する個人データを住所録から削除する関数
#  3. (データの検索) 引数で指定されたデータ項目を住所録から検索する関数
#  4. 住所録に登録されているすべての個人データを表示するものとする。未使用
#     領域も表示すること。
#  


'引数で指定されたデータ項目と合致する個人データを住所録から削除する'(_データ項目) :-
        住所録(名前,_名前ならび),
        nth1(_n番目,_名前ならび,_データ項目),
        各項目を住所録から削除する(_n番目).

各項目を住所録から削除する(_n番目) :-
        名前を削除する(_n番目,_名前ならび,_削除された名前ならび),
        住所を削除する(_n番目,_住所ならび,_削除された住所ならび),
        電話番号を削除する(_n番目,_電話番号ならび,_削除された電話番号ならび),
        学籍番号を削除する(_n番目,_学籍番号ならび,_削除された学籍番号ならび).

名前を削除する(_n番目,_名前ならび) :-
        retract(住所録(名前,_名前ならび)),
        n番目の文字項目を削除(_n番目,_名前ならび,_削除された名前ならび),
        assertz(住所録(名前,_削除された名前ならび)).

住所を削除する(_n番目,_住所ならび) :-
        retract(住所録(住所,_住所ならび)),
        n番目の文字項目を削除(_n番目,_住所ならび,_削除された住所ならび),
        assertz(住所録(住所,_削除された住所ならび)).

電話番号を削除する(_n番目,_電話番号ならび) :-
        retract(住所録(電話番号,_電話番号ならび)),
        n番目の文字項目を削除(_n番目,_電話番号ならび,_削除された電話番号ならび),
        assertz(住所録(電話番号,_削除された電話番号ならび)).

学籍番号を削除する(_n番目,_学籍番号ならび) :-
        retract(住所録(学籍番号,_学籍番号ならび)),
        n番目の数値項目を削除(_n番目,_学籍番号ならび,_削除された学籍番号ならび),
        assertz(住所録(学籍番号,_削除された学籍番号ならび)).

n番目の文字項目を削除(_n番目,L1,L2) :-
        length([_|L0],_n番目),
        append(L0,[''|R],L1),
        append(L0,R,L2).

n番目の数値項目を削除(_n番目,L1,L2) :-
        length([_|L0],_n番目),
        append(L0,[0|R],L1),
        append(L0,R,L2).