Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > Помогите разобраться в чем дело!


Автор: kuller 10.9.2008, 11:34
Вобщем мне дано дерево, в котором есть Муж, Жена и Дети.... ну вот задача вывести кто кому является племянниками ... вначале решил вывести только племянников М и Ж пола .. вот написал программу:

Код

predicates
   man(symbol)
   woman(symbol)
   parent(symbol, symbol)
   plemyanniki(symbol,symbol)
   
clauses
   man(sergey).
   man(dmitriy).
   man(valera).
   man(petr).
   man(mihail).
   man(nikolay).
   man(alex).
   man(alexandr).
   man(kostya).
   
   woman(barbara).
   woman(anna).
   woman(tatiana).
   woman(liza).
   woman(katya).    
   woman(juli).
   woman(raisa).
   woman(lyuda).
   
   parent(barbara, liza).
   parent(liza, alex).
   parent(alex, kostya).
   parent(anna, katya).
   parent(anna, petr).
   parent(sergey, katya).
   parent(sergey, petr).
   parent(katya, juli).   
   parent(petr, alex).  
   parent(petr, alexandr).
   parent(alexandr, lyuda).
   parent(juli, lyuda).
   parent(tatiana, mihail).
   parent(dmitriy, mihail).
   parent(mihail, juli).
   parent(valera, nikolay).
   parent(nikolay, raisa).
   parent(raisa, kostya).
   
   plemyanniki(X,Y):-
   parent(Z,Y),
   parent(A,Z),
   parent(B,Z),
   parent(C,X),
   parent(A,C),
   parent(B,C),
   X<>Y,
   Z<>C,
   man(X),
   woman(Y).
   
   goal
   plemyanniki(X,Y),
   write("\nman and wonam\n").


Вот результат:
Код


man and wonam
X=alex, Y=juli

man and wonam
X=alexandr, Y=juli

man and wonam
X=alex, Y=juli

man and wonam
X=alexandr, Y=juli

man and wonam
X=alex, Y=juli

man and wonam
X=alexandr, Y=juli

man and wonam
X=alex, Y=juli

man and wonam
X=alexandr, Y=juli

man and wonam
X=kostya, Y=lyuda
9 Solutions


выдает 9 результатов ... а должна только 3:

man and wonam
X=alex, Y=juli
man and wonam
X=alexandr, Y=juli
man and wonam
X=kostya, Y=lyuda

помогите разобраться в чем дело.
Заранее благодарен!

Автор: sadgb 12.9.2008, 23:39
я немного подправил код 

 
 plem(X,Y):-
    parent(Z,Y),
    parent(A,Z),
    parent(B,Z),
    parent(C,X),
    parent(A,C),
    parent(B,C),
    X\=Y,
    Z\=C,
    man(X),
    woman(A),
    man(B),
    woman(Y).

на выходе 2 резалта  алекс с джули и александр с джули 
насчёт кости и люды ты поторопился с выводами - если нарисовать дерево то видно что у них общий дед но это не означает что их родители родные братья - возможно они сводные. 
если добавить в базу строку вида   parent(liza,alexandr).
тогда костя с лидой и правда станут племяниками и программа выдаст 3 результата



по поводу твоего варианта  тебе наверно интересно почему у тебя алекс и джули 4 раза : отвечаю 
исходя из твоих обозначений 
варианты A=anna B=sergey 
A= sergey B=anna 
A= sergey B = sergey 
A= anna B = anna

думаю понял в чём была проблема .

удачи. если помог плюсуй ) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)