このディレクトリの索引
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. 住所録に登録されているすべての個人データを表示するものとする。未使用
#     領域も表示すること。
#  

住所録に新規データの追加(_名前,_住所,_電話番号,_学籍番号) :-
        住所録(名前,_名前ならび),
        名前が空の位置を捜す(_名前ならび,_n番目),
        各項目を置換してから登録(_n番目,_名前,_住所,_電話番号,_学籍番号),!.

名前が空の位置を捜す(_名前ならび,_n番目) :-
        append(L0,[''|R],_名前ならび),
        length([_|L0],_n番目).

各項目を置換してから登録(_n番目_名前,_住所,_電話番号,_学籍番号) :-
        名前を置換してから登録(_n番目,_名前),
        住所を置換してから登録(_n番目,_住所),
        電話番号を置換してから登録(_n番目,_電話番号),
        学籍番号を置換してから登録(_n番目,_学籍番号).

名前を置換してから登録(_n番目,_名前) :-
        retract(住所録(名前,_名前ならび)),
        length([_|L0],_n番目),
        append(L0,[_|R],_名前ならび),
        append(L0,[_名前|R],_置換された名前ならび),
        assertz(住所録(名前,_置換された名前ならび)).

住所を置換してから登録(_n番目,_住所) :-
        retract(住所録(住所,_住所ならび)),
        length([_|L0],_n番目),
        append(L0,[_|R],_住所ならび),
        append(L0,[_住所|R],_置換された住所ならび),
        assertz(住所録(住所,_置換された住所ならび)).

電話番号を置換してから登録(_n番目,_電話番号) :-
        retract(住所録(電話番号,_電話番号ならび)),
        length([_|L0],_n番目),
        append(L0,[_|R],_電話番号ならび),
        append(L0,[_電話番号|R],_置換された電話番号ならび),
        assertz(住所録(電話番号,_置換された電話番号ならび)).

学籍番号を置換してから登録(_n番目,_学籍番号) :-
        retract(住所録(学籍番号,_学籍番号ならび)),
        length([_|L0],_n番目),
        append(L0,[_|R],_学籍番号ならび),
        append(L0,[_学籍番号|R],_置換された学籍番号ならび),
        assertz(住所録(学籍番号,_置換された学籍番号ならび)).