このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/788
#  [1] 授業単元:プログラミング  
#  [2] 問題文(含コード&リンク):  
#  #include <stdio.h> 
#  #include <string.h> 
#   
#  struct Address_data{ 
#   char name[81]; 
#   char phone[20]; 
#   int age; 
#  }; 
#   
#  int main() 
#  { 
#   struct Address_data data[2], *p = data; 
#   printf("Input end = Ctrl + D\n"); 
#   for (p = data; p - data < 2; p++) 
#    p->age = -1; 
#   for (p = data; p - data < 2; p++) { 
#    printf("[%ld]name phone age = ", p - data); 
#    if (scanf("%s %s %d", p->name, p->phone, &p->age) != 2) 
#     break; 
#   } 
#   printf("\n"); 
#   for (p = data; p->age >= 0; p++) 
#    printf("%s\t(%d)\t[%s]\n", p->name, p->age, p->phone); 
#   return (0); 
#  } 
# 
# 

構造体名(電話番号).

構造体要素名(電話番号,名前).
構造体要素名(電話番号,電話番号).

要素数10の構造体ならび(_要素数10の構造体ならび) :-
        length(_要素数10の構造体ならび,10),
        構造体名(_構造体名),
        findall(P,(
                    構造体要素名(_構造体名,_構造体要素),
               P =.. [_構造体要素,_])),
               _構造体要素ならび),
        Q =.. [_構造体名,_構造体要素ならび],

        findall(Q,(
                    append(_,[_|_],_要素数10の構造体ならび),
                    構造体要素の入力(_構造体要素ならび)),
                _要素数10の構造体ならび).

構造体要素の入力(_構造体要素ならび) :-
        append(_,[P|_],_構造体要素ならび),
        P =.. [_要素名,V],
        writef('%tを入力してください : ',[_要素名]),
        readln([V]).