В начале программы на Прологе я вижу:
:-dynamic(path/1).
Кажется, это пункт, у которого нет головы. Что это означает?
В начале программы на Прологе я вижу:
:-dynamic(path/1).
Кажется, это пункт, у которого нет головы. Что это означает?
Когда интерпретатор Prolog видит :-
перед предложением при загрузке программы, предложение сразу же выполняется, а не становится частью "базы данных" программы. Наиболее распространенное использование :-
- это определение начального предиката вашей программы в конце вашего файла программы, так что загрузка файла с вашей программой вызывает ее запуск.
В тексте Пролога термин с главным функтором (:-)/1
является директивой.
Директива dynamic
имеет следующий эффект:
P/N
определен, даже если не указано никаких предложений. По умолчанию выполнение цели для предиката без каких-либо предложений вызывает ошибку существования.asserta/1
, rectract/1
и т.п. По умолчанию предикат является статическим, и попытка изменить его вызывает ошибку разрешения.clause/2
. По умолчанию предикат является закрытым, и проверка с помощью clause/2
вызывает ошибку разрешения. В некоторых системах (таких как SWI) все пользовательские предикаты являются общедоступными и поэтому могут быть проверены с помощью clause/2
. Таким образом, этот эффект не может наблюдаться в SWI.Многие реализации обрабатывают неизвестные директивы как обычные цели и выполняют их. Однако реализации сильно различаются по точному моменту времени, когда эти цели выполняются. При перезагрузке файла они отличаются еще больше.
Если вы хотите, чтобы цель выполнялась сразу же после подготовки текста Пролога к выполнению, используйте директиву initialization/1
.