Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задачка на Strawberry Prolog, помогите пожалуйста решить 
:(
    Опции темы
SilentF0rce
  Дата 13.12.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем здравствуйте! Очень нужна помощь в решении одной задачки на Strawberry Prolog, она вроде не такая уж сложная, просто я совсем не знаком с прологом.  smile  
Вот ее условие:
На некотором острове живут «рыцари», которые всегда горят правду, «лжецы», которые всегда лгут, и нормальные люди, которые иногда лгут, иногда говорят правду.
    Трое жителей острова А,В и С, среди которых есть рыцарь, лжец и нормальный человек, высказывают следующие утверждения:
1)    А говорит: «Я нормальный человек».
2)    В говорит: «Это правда».
3)     С говорит: «Я не нормальный человек».
    Кто же такие А,В и С?

Знающие люди, помогите пожалуйста... Очень надо... Буду премного благодарен.
PM MAIL   Вверх
Грымзик
Дата 13.12.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

men(M):- M="knight"; M="lear"; M="normal".

people(A,B,C):- men(A), men(B), A=\=B, men(C), A=\=C, B=\=C.

say1(A):- A="normal".
say3(C):- C=\="normal".

checkA(A):- (A="knight", say1(A)); (A="lear", not(say1(A))); A="normal".
checkB(A,B):- (B="knight", say1(A)); (B="lear", not(say1(A))); B="normal".
checkC(C):- (C="knight",say3(C)); (C="lear", not(say3(C))); C="normal".

check(A,B,C):-people(A,B,C), checkA(A),checkB(A,B),checkC(C).

?-check(A,B,C),write([A,B,C]).


ответ [lear,normal,knight]
PM MAIL   Вверх
SilentF0rce
  Дата 14.12.2009, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Грымзик @ 13.12.2009,  20:34)
Код

men(M):- M="knight"; M="lear"; M="normal".

people(A,B,C):- men(A), men(B), A=\=B, men(C), A=\=C, B=\=C.

say1(A):- A="normal".
say3(C):- C=\="normal".

checkA(A):- (A="knight", say1(A)); (A="lear", not(say1(A))); A="normal".
checkB(A,B):- (B="knight", say1(A)); (B="lear", not(say1(A))); B="normal".
checkC(C):- (C="knight",say3(C)); (C="lear", not(say3(C))); C="normal".

check(A,B,C):-people(A,B,C), checkA(A),checkB(A,B),checkC(C).

?-check(A,B,C),write([A,B,C]).


ответ [lear,normal,knight]

Спасибо большое, чувак!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума Prolog
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

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


 




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


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

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