Переменная связывания в Прологе - PullRequest
3 голосов
/ 22 июля 2010

Я написал предикат common_participant(Person, PairEvent). который возвращает пары фактов из моей базы знаний. Мне было интересно, есть ли способ выполнить привязку переменных и собрать все результаты, не используя точку с запятой каждый раз.

Спасибо,

I.

1 Ответ

1 голос
/ 22 июля 2010

Да, вы можете использовать findall/3.Но в зависимости от того, что вы действительно хотите сделать, часто есть лучшие способы.Хотите выводить вещи?Затем попробуйте это:

print_participants :-
    common_participant(Person, PairEvent),
    write(Person), write(' participates in '), write(PairEvent), write('.'), nl,
    fail.
print_participants :-
    true.

Таким образом, вам не нужно хранить все комбинации в большом списке одновременно, а только ту, которая необходима для печати. ​​

Редактировать: Исправлен код, предложенный Каарел .

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