1
Я пытаюсь решить загадку Эйнштейна с помощью Пролога. ЗадачаEinstein puzzle in Prolog
- Норвежцы живут в первом доме.
- Английский живет в Красном доме.
- Шведский HAS Dogs В качестве домашних животных.
- Датский чай для напитков.
- Зеленый дом находится слева от Белого дома.
- Человек, который живет в зеленом доме, выпивает кофе.
- Человек, который курит Pall Mall, воспитывает птиц.
- Человек, живущий в Желтом доме, курит Данхилл.
- Человек, который живет в Среднем доме, пьет молоко.
- Человек, который курит Blends, живет рядом с тем, у кого есть кошки.
- Человек, который держит лошадей, живет рядом с тем, кто курит Данхилл.
- Человек, который курит Blue Master, пьет пиво.
- Немецкий курит принца.
- Норвежцы живут рядом со стороной Голубого дома.
- Человек, который курит Blends, является соседом того, кто пьет воду.
- У кого-то есть один аквариум с рыбой.
Программа:
neighbor(Rua):-
length(Rua, 5),
Rua = [casa(_,noruegues,_,_,_)|_],
member(casa(vermelha,ingles,_,_,_),Rua),
member(casa(_,sueco,_,_,cachorros),Rua),
member(casa(_,dinamarques,cha,_,_),Rua),
esquerda(casa(verde,_,_,_,_), casa(branca,_,_,_,_),Rua),
member(casa(verde,_,cafe,_,_),Rua),
member(casa(_,_,_,pallmall,passaros),Rua),
member(casa(amarela,_,_,dunhill,_),Rua),
Rua = [_,_,casa(_,_,leite,_,_),_,_],
ao_lado(casa(_,_,_,blends,_), casa(_,_,_,_,gatos),Rua),
ao_lado(casa(_,_,_,_,cavalos), casa(_,_,_,dunhill,_),Rua),
member(casa(_,_,cerveja,bluemaster,_),Rua),
member(casa(_,alemao,_,prince,_),Rua),
ao_lado(casa(_,noruegues,_,_,_), casa(azul,_,_,_,_),Rua),
ao_lado(casa(_,_,_,blends,_), casa(_,_,agua,_,_),Rua),
member(casa(_,_,_,_,peixes),Rua).
ao_lado([X,Y|_],X, Y).
ao_lado([X,Y|_],Y, X).
ao_lado([_|L],X, Y):-
ao_lado(L, X, Y).
esquerda([A|As], A, E) :-
member2(E, As).
esquerda([_|As], A, E) :-
esquerda(As, A, E).
Возможный дубликат [Эйнштейна Загадки со списком терминов] (http://stackoverflow.com/questions/36743498/einstein-riddle -с-лист-из-терминов) –