このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/107
#  [1] 授業単元: 課題  
#  [2] 問題文(含コード&リンク):名前を読み込み,telbook を検索して,
#      その名前に該当する人の電話番号を出力するプログラムを以下に示す
#      C言語のプログラムを仕様の一部と考えて作成せよ. 
#
#  #include 
#  #include  
#  #define MAX 100
#  struct person {
#  char name[MAX];
#  char telno[MAX];
#  };
#  int search(struct person telbook[], int n, char *name)
#  {
#  /* ... */
#  }
#  int main(void)
#  {
#  char name[MAX];
#  struct person telbook[] =
#  { {"Taro", "090-111-1111"},
#  {"Hanako", "090-222-2222"},
#  {"Ichiro", "090-333-3333"},
#  {"Jiro", "090-444-4444"},
#  {"Hanayo", "090-555-5555"} };
#  int n = 5; /* 電話帳に登録された人数 */
#  int idx;
#  
#  printf("名前 > "); scanf("%s", name);
#  idx = search(telbook, n, name);
#  if (idx < 0) {
#  printf("該当者なし\n");
#  } else {
#  printf("%s\n", telbook[idx].telno);
#  }
#  return 0;
#  } 

%  実際にはこの問題はテキストから述語telbook/2をどうやって自動定義するかが
%  問われるのだろう。

telbook('Taro', '090-111-1111').
telbook('Hanako', '090-222-2222').
telbook('Ichiro', '090-333-3333').
telbook('Jiro', '090-444-4444').
telbook('Hanayo', '090-555-5555').

'名前を読み込み,telbook を検索して,その名前に該当する人の電話番号を出力する' :-
        名前を読み込み(_名前),
        その名前に該当する人の電話番号を出力する(_名前).

名前を読み込み(_名前) :-
        write('名前を入力してください : '),
        get_line(_名前).

その名前に該当する人の電話番号を出力する(_名前) :-
        telbook(_名前,_電話番号),
        writef('%tの電話番号は %t です。\n',[_名前,_電話番号]),!.
その名前に該当する人の電話番号を出力する(_名前) :-
        \+(telbook(_名前,_電話番号)),
        writef('入力された名前 %t はtelbookに登録がありません。\n',[_名前]).