Инсталляция SWI-Prolog'а
Интерпретатор
с языка Пролог представлен в виде
упакованного файла pl.arj. SWI-Prolog работает
в среде Windows; для его установки на
компьютере достаточно распаковать файл
pl.arj вместе со всеми хранящимися в этом
файле каталогами. Запустите файл pl.exe
из каталога pl\bin и вы войдете в интерпретатор.
Пролог выдает приглашение "?-" и
ждет вашего ввода.
Чтобы
набирать программы, надо воспользоваться
каким-либо внешним текстовым редактором
(SWI-Prolog не имеет собственного редактора).
Например, вы можете пользоваться
стандартной программой Notepad ("блокнот").
Набранные программы сохраняйте в виде
текстовых файлов с расширением pl (но
можно и расширение txt) в рабочем каталоге.
По умолчанию рабочим каталогом будет
pl\bin, но вы можете это изменить: для этого
создайте ярлык для pl.exe и измените рабочий
каталог в свойствах этого ярлыка. Чтобы
загрузить программу из файла
c:\pl\work\name.pl, находясь в среде интерпретатора,
вы должны в ответ на приглашение "?-"
набрать имя файла в квадратных скобках
?-
[name].
если
установлен рабочий каталог - pl\work, или
набрать имя файла с полным путем к нему,
?-['c:\pl\work\name.pl'].
если
установлен другой рабочий каталог.
Отметим следующую особенность работы
в SWI-Prolog с блокнотом. После набора текста
программы обязательно перейдите курсором
на новую строчку, иначе SWI-Prolog при загрузке
файла с программой выдаст ошибку
"неожиданный конец файла".
Помощь
в SWI-Prolog’е
После
инсталляции интерпретатора SWI-Prolog есть
возможность обратиться к помощи через
ярлык «manual.html». Кроме того, документация
для пользователя находится в файле
manual.pdf (читается с помощью программы
Adobe Acrobat).
Кроме
того, SWI-Prolog имеет помощь online. Вызов
«?- help(<имя
предиката>).» выдает на экран
информацию об этом предикате. Вызов «?-
help.» выдает информацию о том, как
пользоваться этой помощью.
Трассировка
выполнения программы
Предикат
trace позволяет пользователю отслеживать
состояние интерпретатора Пролога.
-
trace/0
Стартует
трассировщик. В процессе мониторинга
в выходной файл выводятся все целевые
утверждения, обрабатываемые интерпретатором
языка. Зачастую этой информации для
пользователя слишком много.
-
trace(+Pred)
Эквивалентно
вызову trace(+Pred,
+all).
-
trace(+Pred, + Ports)
Устанавливаются
точки трассировки на всех предикатах,
удовлетворяющих спецификации Pred.
Ports
есть список портов (call,
redo, exit, fail).
Атом all
ссылается на все порты. Если перед именем
порта стоит символ «–», то данный порт
не трассируется. Знак «+» говорит о том,
что установлена трассировка данного
порта.
При
трассировке предиката получаем следующую
информацию:
-
уровень глубины рекурсивных вызовов;
-
когда предпринимается первая попытка обработки целевого утверждения (порт call);
-
когда цель успешно достигнута (порт exit);
-
возможность других соответствий целевому утверждению (порт redo);
-
невозможность достижения цели, поскольку все попытки завершились неудачно (порт fail).
Примеры:
?-
trace(hello). % трассировка всех
портов предиката hello с любой арностью
?-
trace(foo/2, +fail). % трассировка
неудач при вызове foo/2
?-
trace(bar/1, -all). % прекращение
трассировки bar/1.
Проведем трассировку
для программы:
родитель(
пэм, боб).
родитель(
том, боб).
родитель(
том, лиз).
родитель(
боб, энн).
родитель(
боб, пэт).
родитель(
пэт, джим).
предок(X,Y):-
родитель(X,Y).
предок(X,Y):-
родитель(X,Z),
предок(Z,Y).
?-
trace(родитель).
%
родитель/2:
[call, redo, exit, fail]
Yes
[debug]
?- trace(предок).
%
предок/2:
[call, redo, exit, fail]
Yes
[debug]
?- предок(том,пэт).
T
Call: (6) предок(том, пэт)
T
Call: (7) родитель(том, пэт)
T
Fail: (7) родитель(том, пэт)
T
Redo: (6) предок(том, пэт)
T
Call: (7) родитель(том, _G414)
T
Exit: (7) родитель(том, боб)
T
Call: (7) предок(боб, пэт)
T
Call: (8) родитель(боб, пэт)
T
Exit: (8) родитель(боб, пэт)
T
Exit: (7) предок(боб, пэт)
T
Exit: (6) предок(том, пэт)
Yes
Комментариев нет:
Отправить комментарий