Новое в Прологе - вызов со списками - PullRequest
2 голосов
/ 14 мая 2011

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

Поэтому я решил самостоятельно изучить Пролог, и я столкнулся с этим "испытанием".

У меня есть база данных о сериалах. Имеет следующие предикаты:

человек (person_id, имя).

показать (Show_id, Name).

участвует (person_id, Show_id, активность).

Что я должен выяснить, так это отношения между двумя людьми ... Я должен написать такую ​​цель: сеть (Person1, Person2), которая с именами 2 человек (Person1, Person2) возвращает имена 2 других людей, Person3 и Person4 - Person1 работал с Person3 на любом шоу, Person2 работал с Person4, и Person3 и Person4 оба работали вместе.

Я составил список всех шоу, в которых работал Person1, а затем составил список всех шоу, в которых работал Person2.

Моя проблема в том, как продолжить отсюда. Я думал о том, чтобы составить список всех людей, которые работали на шоу, в которых работал Person1, и еще один список со всеми людьми, которые работали на шоу, в которых работал Person2, а затем попытался выяснить, есть ли среди всех людей Person1. работал, если кто-то работал с кем-то из списка людей, с которыми работал Person2.

Может кто-нибудь подсказать мне, как это решить? Спасибо !!

1 Ответ

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

В прологе нет такой вещи, как «возвращаемое значение»

, поэтому вам действительно нужно написать предикат, такой как

network (Person1, Person2, Person3, Person4).

первым шагом является написание предиката works_with (Person1, Person2)

что-то вроде:

worked_with(Person1,Person2):-
    participates(Person1,X,_),
    participates(Person2,X,_),
    Person1 \= Person2.

, после этого сетевой предикат будет выглядеть примерно так:

network(P1,P2,P3,P4):-
    worked_with(P1,P3),
    worked_with(P2,P4),
    worked_with(P3,P4).

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

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