Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2012, 12:32   #1
fs_x
Пользователь
 
Регистрация: 26.09.2012
Сообщений: 18
Стрелка Кто отец Петра? Нужно найти через Братьев!

Сидор брат Фомы;
Владимир брат Андрея;
Владимир сын Николая;
Юрий брат Виктора;
Иван сын Олега;
Леонид сын Михаила;
Фома брат Николая;
Степан брат Михаила;
Леонид брат Виталия;
Анатолий брат Федора;
Иван брат Антона;
Николай отец Алексея;
Петр отец Фомы;
Геннадий брат Анатолия;
Борис брат Андрея;
Григорий брат Валентина;
Степан брат Алексея;
Никифор брат Валентина;
Николай отец Валентина;
Леонид брат Виталия;
Виталий брат Леонида;
Виктор брат Владимира;
Яков брат Юрия;
Владимир брат Геннадия;
Федор брат Якова;
Яков брат Бориса.
Кто отец Петра?

Код:
DOMAINS
s=symbol

Predicates
father(s,s)
son(s,s)
bro(s,s)

Clauses
father(nikolay,aleksey).
father(petr,foma).
father(nikolay,valentin).
father(X,Y):-son(Y,X).
father(X,Y):-father(X,Z),bro(Y,Z).

bro(sidor,foma).
bro(vladimir,andrey).
bro(uriy,victor).
bro(foma,nikolay).
bro(stepan,mehail).
bro(leonid,vitaliy).
bro(anatoliy,fedor).
bro(ivan,anton).
bro(genadiy,anatoliy).
bro(boris,andrey).
bro(grigoriy,valentin).
bro(stepan,aleksey).
bro(nikolay,valentin).
bro(leonid,vitaliy).
bro(vitaliy,leonid).
bro(viktor,vladimir).
bro(jakov,uriy).
bro(vladimir,genadiy).
bro(fedor,jakov).
bro(jakov,boris).
bro(X,Y):-bro(Y,Z).

son(vladimir,nikolay).
son(ivan,oleg).
son(leonid,mihail).
son(X,Y):-father(Y,X).
Помогите исправить ошибку, в турбе прологе...
fs_x вне форума Ответить с цитированием
Старый 20.10.2012, 14:21   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Убийца - дворецкий. Инфа 100%
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 20.10.2012, 14:28   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Дело даже не в программе, а в том, что по исходным данным отца Петра не вычислить. Походу так. Можно вычислить трех его сыновей, кучу внуков, совершенно постороннего Олега с сыновьями Иваном и Антоном - но Петр один фиг на вершине этой пирамиды.

Так что либо решения не существует, либо правильный ответ - никто из списка... либо условие изначально неполное.

Ну и предложения по коду:

Код:
bro(X,Y):-bro(Y,Z).
поменять на

Код:
bro(X,Y):-bro(Y,Z),bro(X,Z).
добавить кусок:

Код:
son(X,Z):-father(Z,Y), bro(X,Y).

И хотя я Prolog уже десяток лет в глаза не видел, но мне кажется, там еще целевой раздел должен быть goal
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 20.10.2012 в 14:32.
Sciv вне форума Ответить с цитированием
Старый 20.10.2012, 14:39   #4
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

я бы убрал все правила и добавил вместо них:
Код:
father (X,Y):- son (Z,X), bro (Z,Y).
а цель такая:
Код:
father (X,petr).
Цитата:
там еще целевой раздел должен быть goal
ну если goal - нету, то цель просто вводится в окно dialog

P.S. правильного ответа, как и сказал Sciv, кажись нету. Ответ будет No solution
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.

Последний раз редактировалось Niro; 20.10.2012 в 14:42.
Niro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поздравляю братьев СЛАВЯН с победой на ACM-ICPC 2012 Noor Свободное общение 7 20.05.2012 17:54
Нужно решить,очень,кто может ritm9393 Помощь студентам 3 10.01.2012 06:14
А кто знает как менять IP через Delphi? micaell Работа с сетью в Delphi 6 23.01.2007 18:15