Есть такой код на Turbo Prolog 2.0 для вывода количества детей у семье(предикат query2). Но выводиться только один результат, первый. Почему? И как решить эту проблему?
| Код | domains day,year,salary=integer f_name,s_name,month,job=string data=data(day,month,year) work=work(job,salary) member=member(f_name,s_name,data,work) childrens=member* predicates nondeterm family(member,member,childrens) nondeterm chname(childrens) nondeterm query1 nondeterm query2 nondeterm child_count(integer,childrens) clauses family( member("Misha","Alexandrov",data(20,"oktober",1962),work("enginer",1120)), member("Maria","Alexandrov",data(1,"april",1964),work("laborant",980)), [ member("Alexandr","Alexandrov",data(10,"july",1986),work("student",200)) ] ). family( member("Ivan","Petrov",data(12,"jan",1965),work("worker",950)), member("Galina","Petrova",data(5,"jan",1966),work("no",0)), [ member("Nikolay","Petrov",data(16,"nov",1986),work("manager",850)), member("Sergey","Petrov",data(16,"nov",1986),work("manager",970)), member("Evgeniy","Petrov",data(14,"april",1990),work("student",150)) ] ). family( member("Sergey","Kaval",data(21,"August",1972),work("worker",750)), member("Raisa","Kaval",data(15,"september",1974),work("teacher",650)), [ member("Yana","Kaval",data(4,"April",1996),work("no",0)), member("Ioan","Kaval",data(5,"April",1997),work("no",0)), member("Petro","Kaval",data(6,"April",1998),work("no",0)) ] ). family( member("Sergey","Ivanov",data(21,"August",1972),work("worker",750)), member("Raisa","Ivanov",data(15,"september",1974),work("teacher",650)), [ member("Yana","Ivanova",data(4,"April",1996),work("no",0)), member("Ioan","Ivanov",data(5,"April",1997),work("no",0)), member("Petro","Ivanov",data(6,"April",1998),work("no",0)) ] ). family( member("Sergey","Kornij",data(21,"August",1972),work("worker",750)), member("Raisa","Kornij",data(15,"september",1974),work("teacher",650)), [ member("Ioan","Kornij",data(5,"April",1997),work("no",0)), member("Petro","Kornij",data(6,"April",1998),work("no",0)) ] ). chname([]). chname([member(X,_,_,_)|T]):-write(X),nl,chname(T). child_count(0,[]). child_count(Num,[_|T]):-child_count(Num1,T),Num=Num1+1.
query1 :- write("Input surname?"),nl,readln(Sname), family(member(W,Sname,_,_),member(Y,_,_,_),Children), writef("----START-[%s]-",Sname),nl, write(W),nl,write(Y),nl,chname(Children), write("------END--------"),nl. query2 :- family(member(_,S_name,_,_),_,Children), child_count(Num,Children), writef("%s - has %d child \n",S_name,Num). goal query2.
|
|