Две разные базы данных, которые нужны, смешаны. Я не мог преодолеть это. ПРОЛОГ - PullRequest
0 голосов
/ 13 мая 2011

это действительно сложный вопрос.У меня есть экзамен.И вопросы будут такими.Они действительно тяжелые.Это моя база данных:

director (martinscorsese, american, 1, 51).

director (hayaomiyazaki, japanese, 1, 23).

director (stevenspielberg, american, 3, 49).

director (georgelucas, american, 0, 19).

director (christophernolan, american, 0, 10).

watched(departed, [george, jane, eric]).

watched(theaviator, [jane,eric]).

watched(swrevengeofthesith, [paul,eric]).

watched(transformers, [paul, george, jane]).

Я хочу реализовать предикат audiance(A,N,O,L1), который возвращает список всех фильмов (L1), которые еще никто не видел в A, режиссер которыхдиректор по национальности N, который выиграл по крайней мере O Оскар.Список L не должен содержать дубликатов.

audiance([paul],american,1,X). returns X=[ departed, theaviator ]

audiance([paul,george],N,0,X). returns N=american X= [theaviator]

audiance(X,american,0,[swrevengeofthesith]). returns X=[jane,george]

audiance([paul,george,jane],N,0,X). returns false

PLZ, помогите мне :))

1 Ответ

1 голос
/ 13 мая 2011

Я мог бы просто опубликовать код, но я не думаю, что это поможет сдать экзамен

. Вы должны разделить проблему на более мелкие и более простые подзадачи.

1) предикат not_seen (Фильм, Люди), который возвращает истину, только если никто в списке Люди не видели Фильм

2) предикат Director_nationality (Фильм, Национальность), который возвращает истину, еслирежиссер фильма имеет данную национальность

3) предикат director_oscars (Director, Num_Oscars), который возвращает значение true, если режиссер выиграл хотя бы Num_Oscars oscars

, тогда вам нужно объединить все этив одном предикате, который вы можете назвать movie_requirements (Movie).

наконец, чтобы найти все фильмы, которые вы можете использовать findall / 3
, чтобы убедиться, что не будет дубликатов, которые вы могли быиспользуйте sort / 2 , который удалит все дубликаты, или используйте bagof / 3 вместо findall / 3

check member / 2 и другие встроенные предикаты для списков

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