Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Prolog]Вывод несколько результатов 
V
    Опции темы
Neox_GeForce
Дата 26.5.2012, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 14.11.2007
Где: Украина

Репутация: нет
Всего: нет



Есть такой код на 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.




--------------------
user posted image
Челябинские программисты настолько суровы, что обходятся без компиляторов.
Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска.
PM MAIL ICQ   Вверх
Фантом
Дата 26.5.2012, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Потому что надо либо каким-то образом заставить систему переискать результат после обнаружения первого подходящего (см. "методы организации перебора в Прологе" и служебный предикат fail), либо явно потребовать найти все решения  (см.служебный предикат findall).
PM   Вверх
Neox_GeForce
Дата 26.5.2012, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 14.11.2007
Где: Украина

Репутация: нет
Всего: нет



Сделал с помощью fail
Код

goal query1,nl,query2,fail.



--------------------
user posted image
Челябинские программисты настолько суровы, что обходятся без компиляторов.
Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Добро пожаловать в раздел "Другие языки" форума Vingrad!

Void
Void

Раздел посвящён различным языкам программирования, для которых (в силу невысокой популярности) нет отдельного раздела (GPSS, Lua, MATLAB, Ada, Forth, Smalltalk, Tcl, REXX, AWK и др.)

  • Обязательно следуйте правилам Форума.
  • Пожалуйста, прочитайте и следуйте рекомендациям по работе в разделе и навигации по Форуму.
  • Для вставки текстов исходных кодов используйте подсветку синтаксиса из выплывающего списка Код в форме ответа. Если Ваш язык в списке не представлен, то используйте тег: [code=ваш_язык]код[/code], например, [code=ada]код[/code]. Если в будущем подсветка синтаксиса для указанного языка будет реализована, исходный код преобразится.
  • Помните, один вопрос - одна тема.

Приятного времяпрепровождения! С уважением, Void, kemiisto .

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Другие языки | Следующая тема »


 




[ Время генерации скрипта: 0.0844 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.