Директива gprolog include не работает
Я использую gprolog версии 1.4.2 на компьютере с Fedora 17 Linux.
Я написал небольшую прологическую программу, которая отлично работает. В нем я определил несколько предикатов, которые я хочу использовать в других пролог-программах. Поэтому я решил поместить их в отдельный файл и использовать include
директива (определена в разделе 7.1.8 версии 1.4.2 руководства по GNU Prolog). Однако это не сработало. gprolog
сказал, что эти предикаты (которые были во включенном файле) были неопределенными.
Поэтому в приглашении gprolog я набираю:
| ?- include('tools.pro').
И я получаю:
uncaught exception: error(existence_error(procedure,include/1),top_level/0
Так что он явно не признает директиву. Я искал все и не могу найти причину, почему это должно произойти. Есть мысли по этому поводу?
2 ответа
Как указано в стандарте ISO Prolog, include/1
это директива, а не предикат. GNU Prolog следует официальному стандарту, поэтому вы не можете использовать include/1
в качестве предиката, в том числе в запросе верхнего уровня. Как объяснил Сергей, если вы хотите загружать свои программы, вы можете использовать встроенный предикат consult/1
или его ярлык ([Fie1, File, ...]
).
Чтобы использовать директиву include/1 в ваших исходных файлах, запишите ее перед (:-)/1
оператор. Например:
:- include('tools.pro').
include/1
для использования в исходных файлах Prolog.
В строке запроса вы, вероятно, просто хотите обратиться к исходному файлу: ['tools.pro'].