Нет прав на изменение статической процедуры `findall / 3 'при запуске файла вместо интерактивного - PullRequest
0 голосов
/ 09 мая 2019

У меня есть какая-то «база данных» в файле .pl:

exotic(1, 1).
exotic(2, 1).
exotic(3, 1).
exotic(4, 1).
exotic(5, 0).
exotic(6, 0).

Я работаю в интерактивном режиме (с терминала после загрузки файла):

findall(X, exotic(X,1), L).

Работает, Lзаполнено [1,2,3,4], как и ожидалось.

Но когда я помещаю этот findall в файл и запускаю файл, я получаю сообщение об ошибке: "Нет разрешения на изменение статической процедуры` findall / 3 '".

Что его вызывает и как поместить в файл, чтобы иметь доступ к списку L?

1 Ответ

0 голосов
/ 09 мая 2019

Если вы хотите сделать запрос из исходного файла, стандартным решением является использование директивы initialization/1. Например:

:- initialization((
    findall(X, exotic(X,1), L),
    write(L), nl
)).

Вы не можете просто написать в своем исходном файле предложение , например:

findall(X, exotic(X,1), L).

поскольку это будет означать (пытаться) переопределить стандартный встроенный предикат, что большинство систем Prolog не допускает, следовательно, вы получили ошибку.

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