Вопрос по Прологу (задача Эйнштейна) #444860


#0 by _Atilla
Есть знам задача Эйнштейна: 1. Есть 5 домов, каждый разного цвета. 2. В каждом доме живёт один человек, отличающийся от соседнего по национальности: немец, англичанин, швед, датчанин и норвежец. 3. Каждый пьёт только один определённый напиток, курит определённую марку сигарет и держит определённое животное. 4. Никто из пяти человек не пьёт одинаковые с другими напитки, не курит одинаковые сигареты и не держит одинаковое животное. Вопрос: Кому принадлежит рыба? Подсказки: 1. Англичанин живёт в красном доме. 2. Швед держит собаку. 3. Датчанин пьёт чай. 4. Зелёный дом стоит слева от белого, рядом. 5. Жилец зелёного дома пьёт кофе. 6. Человек, который курит "Pall Mall", держит птицу. 7. Жилец из среднего дома пьёт молоко. 8.Жилец из желтого дома курит "Dunhill". 9. Норвежец живёт в первом доме. 10. Курильщик "Marlboro" живет около того, кто держит кошку. 11. Человек, который содержит лошадь, живёт около того, кто курит "Dunhill". 12. Курильщик сигарет "Winfield" пьёт пиво. 13. Норвежец живёт около голубого дома. 14. Немец курит "Rothmans" 15. Курильщик "Marlboro" живёт по соседству с человеком, который пьёт воду. % h(nationality, color, drink, cigar, pet) member(X,[X|_]). member(X,[_|Ys]) :- member(X, Ys). first(X, [X|_]). left_of(X,Y,[X,Y|_]). left_of(X,Y,[_|Zs]) :- left_of(X, Y, Zs). next_to(X,Y,Zs) :- left_of(X, Y, Zs). next_to(X,Y,Zs) :- left_of(Y, X, Zs). middle(X,[_,_,X,_,_]). solve(Hs) :- Hs = [_,_,_,_,_],    member(h(_, _, _, _, fish), Hs),    member(h(brit, red, _, _, _), Hs),    member(h(swede, _, _, _, dog), Hs),    member(h(dane, _, tea, _, _), Hs),    member(h(_, green, coffee, _, _), Hs),    member(h(_, _, _, pallmall, bird), Hs),     member(h(_, yellow, _, dunhill, _), Hs),     member(h(_, _, beer, bluemaster, _), Hs),     member(h(german, _, _, prince, _), Hs),     first(h(norwegian, _, _, _, _), Hs),     next_to(h(norwegian,_,_,_,_), h(_,blue,_,_,_), Hs),     next_to(h(_, _, _, blends, _), h(_, _, water, _, _), Hs),     next_to(h(_, _, _, _, horse), h(_, _, _, dunhill, _), Hs),     next_to(h(_,_,_,blends,_), h(_,_,_,_,cat), Hs),     middle(h(_,_,milk,_,_), Hs),     left_of(h(_, green, _, _, _), h(_, white, _, _, _), Hs). ?- solve(X), write(X). Вопрос: Условие "Англичанин живёт в красном доме." задается в прологе как h(brit, red, _, _, _). Как задается условие "Англичанин НЕ живёт в красном доме."???
#1 by bvn13
хм.... не знаю языка, но предполагаю, что-то вроде: h(brit, NOT red, _, _, _)
#2 by _Atilla
))) Хорошая фантазия?
#3 by Denp
ИМХО надо определять notmember(...), насколько я помню пролог
#4 by _Atilla
КАк определить notmember(...)?
#5 by _Atilla
Казалось бы простая задача.... ((((
#6 by Denp
но могу и ошибаться)
#7 by Stagor
отмечусь
#8 by Жан Пердежон
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С