Пролог Логика с соседними комнатами - PullRequest
1 голос
/ 20 октября 2019

Вот мой вопрос:

Охотник, Лора, Аддили (Джек), Рамей (Салли) и Арни (Джим) живут в одном общежитии с пятью смежными спальнями. Охотник не спит в 5-й спальне, а Лора не спит в первой спальне. Арни не спит в первой или последней спальне и не находится в спальне рядом с Аддили или Лорой. Рэми спит в какой-то спальне выше, чем у Лоры. Кто в каких спальнях спит? Напишите программу Prolog для решения этой проблемы.

Определите, что такое смежность, затем, какие спальни, а затем создайте layout(X), который позволяет вам ввести все правила.


Это кодДо сих пор я пробовал несколько вариантов этого:

adjcnt(X,Y) :- X = (Y+1;Y-1).

rooms([ bedroom(_, 1), bedroom(_, 2), bedroom(_, 3), bedroom(_, 4), bedroom(_, 5) ]).

layout(X) :- rooms(X),
        member( bedroom(hunter, V), X),
        member( bedroom(laura,  W), X),
        member( bedroom(arnie,  X), X),
        member( bedroom(ramey,  Y), X),
        member( bedroom(addiley,Z), X),

        V \= 5,
        W \= 1,
        X \= 1,
        X \= 5,
        X \= adjcnt(X,Z),
        X \= adjcnt(X,W),
        Y @> W.

Основная проблема заключается в том, правильно ли я учитываю соседние комнаты? и как мне правильно это реализовать. Я постоянно получаю «НЕТ», когда я пытаюсь запустить код. Спасибо всем, кто может мне помочь !!

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Еще две вещи:

  • Вы используете X для двух совершенно разных вещей: одна для структуры комнаты, а другая - переменная для arnies комнаты. Предложение: замените room(X) на room(Rooms), а также замените на Rooms в других необходимых местах.

  • Оператор not, который используется для отрицания того, что две комнатыне смежные должны быть закодированы как \+, например, \+adjcnt(X,Z).

1 голос
/ 20 октября 2019

на первый взгляд, здесь есть опечатка

adjcnt(X,Y) :- X = (Y+1;Y-1).

, поскольку (=) / 2 не присваивает X, но пытается унифицировать его два аргумента. И так, это явно не удается. Скорее всего, вы ищете

adjcnt(X,Y) :- X is Y+1; X is Y-1.
...