このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/108
#  以下のCのプログラム "test.c" から
#  電話番号情報を抜き取り述語 電話帳/2 を定義しなさい。
#  電話番号はperson型の構造体 telbook として定義されている。
#  
#  #include <stdio.h> 
#  #include <string.h>              
#  #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; 
#  } 
# 
# 

'Cのプログラム "test.c" から電話番号情報を抜き取り述語 電話帳/2 を定義する' :-
        get_lines('test.c',Lines),
        telbookを捜す(Lines,R),
        電話帳を定義する(R).

telbookを捜す(Lines,R) :-
        append(L0,[_行|R],Lines),
        sub_atom(_行,_,_,_,'struct person telbook[];'),!.

電話帳を定義する(Lines) :-
        append(_,[_行|R],Lines),
        split(_行,[' ','{','"','}'],[_名前,_電話番号]),
        assertz(電話帳(_名前,_電話番号)),
        '}が2回出現'(R),!.

'}が2回出現'([_行|_]) :-
        count(sub_atom(_行,_,1,_,'}'),2),!.
'}が2回出現'([]).