![]() |
|
|
![]()
|
|
| ijk987 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 7.1.2010 Репутация: нет Всего: нет |
Привет всем! Помогите, пожалуйста, решить на прологе следующую задачу (или подкиньте идею, как решать).
Борисов, Кириллов, Данин, Савин - инженеры. Один из них - автомеханик, другой - химик, третий - строитель, четвертый - радиотехник. Известны следующие десять фактов: 1) Борисов обыгрывает в шахматы Данина 2) Савин обыгрывает в шахматы Борисова 3) Борисов бегает на лыжах быстрее того инженера, который моложе него 4) Борисов ходит в театр вдвое чаще, чем тот инженер, который старше Кириллова 5) Химик посещает театр вдвое чаще, чем автомеханик 6) Химик не самый старый и не самый молодой 7) Радиотехник бегает на лыжах быстрее, чем строитель 8) Автомеханик обыгрывает в шахматы строителя 9) Самый старый обыгрывает всех в шахматы 10) Самый молодой быстрее всех бегает на лыжах Необходимо назвать профессии каждого из инженеров, если известно, что ни в спорте, ни в приверженности к театру среди них нет двух одинаковых. Поскольку смысл последнего условия про приверженность к спорту и театру не смог объяснить даже выдавший задачу, то его можно проигнорировать. Я действовал следующим образом: 1) составил список необходимых предикатов: chess(symbol,symbol) - первый обыгрывает в шахматы второго theatre(symbol,symbol) - первый ходит в театр чаще второго skiing(symbol,symbol) - первый бегает на лыжах быстрее второго younger(symbol,symbol) - первый моложе второго chemist(symbol) - химик mechanic(symbol) - автомеханик technician(symbol) - радиотехник builder(symbol) - строитель 2) к каждому исходному факту составил равносильные ему: 1) chess(borisov,danin). 2) chess(savin,borisov). 3) skiing(borisov,X):-younger(X,borisov). younger(X,borisov):-skiing(borisov,X). 4) theatre(borisov,X):-younger(kirillov,X). younger(kirillov,X):-theatre(borisov,X). 5) chemist(X):-mechanic(Y),theatre(X,Y). mechanic(X):-chemist(Y),theatre(Y,X). theatre(X,Y):-chemist(X),mechanic(Y). 6) chemist(X):-younger(_,X),younger(X,_). 7) technic(X):-builder(Y),skiing(X,Y). builder(X):-technic(Y),skiing(Y,X). skiing(X,Y):-technic(X),builder(Y). 8) mechanic(X):-builder(Y),chess(X,Y). builder(X):-mechanic(Y),chess(Y,X). chess(X,Y):-mechanic(X),builder(Y). 9) chess(X,_):-not(younger(X,_)). 10) skiing(X,_):-not(younger(_,X)). 3) затем определил каждый предикат (что оказалось возможно единственным образом): chess(borisov,danin). chess(savin,borisov). younger(X,borisov):-skiing(borisov,X). theatre(borisov,X):-younger(kirillov,X). mechanic(X):-chemist(Y),theatre(Y,X). chemist(X):-younger(_,X),younger(X,_). technic(X):-builder(Y),skiing(X,Y). builder(X):-mechanic(Y),chess(Y,X). chess(X,_):-not(younger(X,_)). skiing(X,_):-not(younger(_,X)). 4) с небольшими исправлениями составил программу на прологе, которая переполнила стек. Помогите, плиз!!!!! |
|||
|
||||
| Грымзик |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 7.10.2009 Репутация: 6 Всего: 6 |
У Вас переполнение вызывает такие предикаты как
skiing(borisov,X):-younger(X,borisov). younger(X,borisov):-skiing(borisov,X). тут бесконечная рекурсия. Я Вам могу помочь, но только завтра, а если нет времени ждать, то я бы посоветовала бы сделать так: есть структура man(фамилия, место по возрасту, место в шахматах, место в лыжах, место в посещении театра) где все места это цифры от 1 до 4. В последнем условии, по-моему, и имелось в виду то, что цифры эти повторяться не будут. Генерировать список этих элементов, а дальше уже проверять. Генерить можно например так
|
|||
|
||||
| ijk987 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 7.1.2010 Репутация: нет Всего: нет |
Спасибо огромное!!!
|
|||
|
||||
![]()
|
| Правила форума Prolog | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Prolog | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |