Я пытаюсь решить загадку Эйнштейна с помощью Пролога. Когда я пытаюсь пробежать мимо домов (Hs), это показывает Нет. Задача
- Британец живет в красном доме.
- Швед держит собак как домашних животных.
- Датчанин пьет чай.
- Зеленый дом находится слева от белого дома.
- Хозяин зеленого дома пьет кофе.
- Хозяин, который курит Pall Mall, разводит птиц.
- Хозяин желтого дома курит Dunhill.
- Хозяин, живущий в центральном доме, пьет молоко.
- Норвежец живет в первом доме.
- Хозяин, который курит Blends, живет рядом с тем, кто держит кошек.
- Хозяин, который держит лошадь, живет рядом с тем, кто курит Dunhill.
- Хозяин, который курит Bluemasters, пьет пиво.
- Немец курит принца.
- Норвежец живет рядом с синим домом.
- Хозяин, который курит Blends, живет рядом с тем, кто пьет воду.
houses(Hs) :- length(Hs, 5), member(h(english,_,_,_,red), Hs), member(h(swede,dog,_,_,_), Hs), member(h(_,_,_,coffee,green), Hs), member(h(dane,_,_,tea,_), Hs), next(h(_,_,_,_,green), h(_,_,_,_,white), Hs), member(h(_,bird,'Pall Mall',_,_), Hs), member(h(_,_,'Dunhill',_,yellow), Hs), Hs = [_,_,h(_,_,_,milk,_),_,_], Hs = [h(norwegian,_,_,_,_)|_], next(h(_,horse,_,_,_), h(_,_,'Dunhill',_,_), Hs), next(h(_,_,blend,_,_), h(_,cat,_,_,_), Hs), member(h(_,_,'Blue Master',beer,_), Hs), member(h(german,_,'Prince',_,_), Hs), next(h(norwegian,_,_,_,_), h(_,_,_,_,blue), Hs), next(h(_,_,'Blend',_,_), h(_,_,_,water,_), Hs), member(h(_,fish,_,_,_), Hs). next(A, B, Ls) :- append(_, [A,B|_], Ls). next(A, B, Ls) :- append(_, [B,A|_], Ls).
Я понятия не имею, что не так. Спасибо
next
? Это не встроенный предикат SWI Prolog. - person lurker   schedule 24.04.2016'Pall Mall', 'Dunhill', blend, 'Blue Master', 'Prince'
и'Blend'
. Невозможно вместить их всех в это. В противном случае очень легко сделать ошибку, вручную переведя правила в теh(....)
спецификации; лучше использовать Prolog для этого тоже. - person Will Ness   schedule 09.05.2016