Как создать условие для аргумента функтора в правиле - PROLOG - PullRequest
1 голос
/ 03 апреля 2020

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

Итак, у меня есть что-то вроде этого:


person("John",19).
person("Kate",14).
person("Carl",8).

film("Shining",18,"Horror").
film("Little Agents",13,"Family").
film("Frozen",7,"Animation").

can_borrow(film(_,Age1,_),person(_,Age2)):-Age2>=Age1.

И если я спрашиваю, то есть

?- can_borrow(film("Shining",18,"Horror"),person("John",19)).

Это работает и возвращает true.

Но когда я прошу показать мне все возможные комбинации (все фильмы, которые может посмотреть каждый человек)

?- can_borrow(X,Y).

У меня возникает ошибка:

ERROR: Arguments are not sufficiently instantiated

Как правильно написать правило, чтобы оно работало так, как я написал выше?

Заранее спасибо.

1 Ответ

1 голос
/ 03 апреля 2020

film(_, Age1, _) и person(_, Age2) в can_borrow(film(_, Age1, _), person(_, Age2)) - это просто слагаемые с функтором, который бывает совпадает с предикатом. Но Пролог не придает ему особого значения. Здесь следует вызывать предикаты для унификации условий. Например:

can_borrow(film(Title, Age1, Genre), person(Name, Age2)) :-
    film(Title, Age1, Genre),
    person(Name, Age2),
    Age1 =< Age2.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...