Эйнштейн Риддл, используя Пролог
Я пытаюсь разгадать загадку Эйнштейна, используя Пролог. Когда я пытаюсь бежать по домам (Hs), это показывает, нет. Задача
- Брит живет в красном доме.
- Швед держит собак в качестве домашних животных.
- Датчанин пьет чай.
- Зеленый дом находится слева от белого дома.
- Владелец зеленого дома пьет кофе.
- Владелец, который курит Pall Mall, выращивает птиц.
- Хозяин желтого дома курит Данхилл.
- Хозяин, живущий в центре дома, пьет молоко.
- Норвежец живет в первом доме.
- Хозяин, который курит смесь, живет рядом с тем, кто держит кошек.
- Владелец, который держит лошадь, живет рядом с тем, кто курит Dunhill.
- Владелец, который курит Bluemasters, пьет пиво.
- Немец курит принц.
- Норвежец живет рядом с синим домом.
- Владелец, который курит смесь, живет рядом с тем, кто пьет воду.
дома (Hs):- длина (Hs, 5), член (h (английский, _, _, _, красный), Hs), член (h (швед, собака, _, _, _), Hs), член (h (_, _, _, кофе, зеленый), Hs), член (h (датский, _, _, чай, _), Hs), следующий (h (_, _, _, _, зеленый), h (_, _, _, _, белый), Hs), член (h (_, птица,'Pall Mall',_,_), Hs), член (h(_,_,'Dunhill',_, желтый), Hs), Hs = [_,_,h(_,_,_, молоко,_),_,_], Hs = [h(норвежский,_,_,_,_)|_], следующее (h (_, лошадь,_,_,_), h(_,_,'Dunhill',_,_), Hs), следующее (h (_, _, blend, _, _), h (_, кошка, _, _, _), Hs), член (h(_,_,'Blue Master', пиво, _), Hs), член (h (немецкий,_,'Prince',_,_), Hs), следующий (h (норвежский, _, _, _, _), h (_, _, _, _, синий), Hs), следующий (h(_,_,'Blend',_,_), h(_,_,_, вода, _), Hs), член (h (_, рыба, _, _, _), Hs). следующий (A, B, Ls):- добавить (_, [A,B|_], Ls). следующий (A, B, Ls):- добавить (_, [B,A|_], Ls).
Я понятия не имею, что не так. Спасибо
1 ответ
Вот обобщение вашей программы. Я добавил несколько дополнительных *
удалить несколько целей и заменить некоторые термины на _/*origterm*/
, И тем не менее, в результате программа все еще не работает. Следовательно, ошибка должна быть в оставшемся фрагменте. Вы ничего не сказали о программе (Edit: вы добавили что-то позже), поэтому я не знаю (Edit: want to), о чем она. Но несмотря ни на что, ошибка должна быть в оставшейся видимой части:
: - инициализация (дома (_Sol)).:- op(950, фу, *). *_. дома (Hs):- длина (Hs, 5), *член (h (английский, _, _, _, красный), Hs),% 2 *член (h (швед, собака, _, _, _), Hs), *член (h (_, _, _, кофейный, зеленый), Hs), *член (h (датский, _, _, чай, _), Hs), *следующий (h (_, _, _, _, зеленый), h (_, _, _, _, белый), Hs), член (h (_, _/ * bird * /, 'Pall Mall', _, _), Hs), член (h (_, _, 'Dunhill', _, _/ * желтый * /), Hs), *Hs = [_, _, h (_, _, _, молоко, _), _, _], *Hs = [h (норвежский, _, _, _, _) | _], *следующий (h (_, конь, _, _, _), h (_, _, "Dunhill", _, _), Hs), следующий (h (_, _, blend, _, _), _/ * h (_, cat, _, _, _) * /, Hs), член (h (_, _, 'Blue Master ', _/ * beer * /, _), Hs), член (h (_/ * German * /, _,' Prince ', _, _), Hs), *следующий (h (норвежский, _, _, _, _), h (_, _, _, _, синий), Hs), следующий (h (_, _, "Смешать", _, _), _/ * h (_, _, _, вода, _) * /, Hs), *член (h (_, рыба, _, _, _), Hs). следующий (A, B, Ls):- добавить (_, [A,B|_], Ls). следующий (A, B, Ls):- добавить (_, [B,A|_], Ls).
Там не так много осталось! В видимой части есть хотя бы одна ошибка! (И, строго говоря, в других частях может быть гораздо больше ошибок. Мы просто не знаем).