Пролог моделирование задач: объекты разных цветов - PullRequest
0 голосов
/ 16 января 2020

Я новичок в написании Пролога и хотел бы знать, как сформулировать следующие свойства так, чтобы это было полезно для дальнейшего рассуждения.

  • Есть N объектов.
  • Каждый объект имеет цвет.
  • Существует три возможных цвета: красный, зеленый, синий

Предположим, есть два объекта: объект 1 красный, объект 2 имеет другой, цвет не указан Как я могу спросить у Пролога о возможных цветах объекта 2? Я бы ожидал зеленого и синего.

Мой код пока:

object(obj_1).
object(obj_2).

color_value(red).
color_value(green).
color_value(blue).

color(Obj, Val) :- object(Obj), color_value(Val).
color(obj_1, red).

different_color(O1, O2) :- color(O1, X), color(O2, Y), X \= Y.
different_color(obj_1, obj_2).

Когда я запрашиваю возможные цвета obj_2, Prolog включает red. Так что я как-то ошибаюсь.

color(obj_2, A).
A = red ;
A = green ;
A = blue.

Я подозреваю, что что-то не так с тем, как я использую цвет и другое_цвет.

1 Ответ

2 голосов
/ 17 января 2020

Ваше определение color/1 предлагает избыточные решения для color(_, red) или color(obj_1, _). Ваш пункт для color(Obj, Val) должен исключить случай, когда Obj равен obj_1 или Val равен red.

Упрощенный подход c может быть следующим:

color(Obj, Val) :-
    dif(Obj, obj_1),
    dif(Val, red),
    object(Obj),
    color_value(Val).
color(obj_1, red).

Также рассмотрим комментарий @DavidTonhofer о стиле. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...