У меня проблема с определением процедур в Прологе. У меня есть два исходных файла, и я хочу проконсультироваться с движком Prolog с обоими. Это можно сделать, вызвав Prolog как swipl -g «['1.pl', '2.pl'].
Оба файла созданы другой программой, написанной на другом языке программирования, и я не могу заранее предсказать точное содержание файлов.
Проблема в том, что в одном из файлов всегда есть правило
predicate1(X):-predicate2(X).
Но иногда правило
predicate2(something):-body
не существует в обоих файлах, и я получаю сообщение об ошибке «predicate2 is undefined» при выполнении некоторых запросов для predicate1.
Если я включу строку
:- dynamic(predicate2/2).
в один из файлов это помогает, только если предикат / 2 не определен в другом файле (иначе я получаю что-то вроде «вы действительно уверены, что хотите переопределить предикат2 / 2?». И здесь я не хочу что-то переопределять чтобы сохранить данные из другого файла.
Итак, я понятия не имею, как сделать предикат просто «определенным». Мне нужно решение для SWI-Prolog или SICStus Prolog. (к сожалению, в версиях нет раздела для определения предикатов, вроде визуального Пролога)