Скачиваний:
19
Добавлен:
01.05.2014
Размер:
299.01 Кб
Скачать

Среда для разработки программ

В СиПрологе отсутствует встроенный редактор, поэтому при разра­ботке программ программист должен пользоваться средствами опера­ционной системы UNIX. Обычно процесс разработки программы проте­кает следующим образом. Вначале программист при помощи текстового редактора, скажем, редактора "vi", записывает программу. Затем про­граммист запускает интерпретатор СиПролога, который обрабатывает файл с программой. Если обнаружится ошибка, то программист может закончить сеанс работы с интерпретатором СиПролога, исправить про­грамму, находящуюся в файле, при помощи редактора и снова запустить обработку файла с программой интерпретатором СиПролога. Все это, од­нако, может оказаться неудобным при работе с программными файлами большого размера, поскольку их обработка займет много времени. В СиПрологе есть встроенный предикат "system/I", который позволяет выполнять команды операционной системы непосредственно во время работы с интерпретатором языка Пролог. Этот предикат позволяет испра­вить исходный файл с помощью системного редактора, не выходя из сеанса работы с интерпретатором, например, при помощи команды:

| ?- system ("vi а.рl).

Заметьте, что команда операционной системы, являющаяся аргумен­том предиката "system", должна быть представлена в виде списка симво­лов. В результате приведенного запроса начнется отдельный процесс редак­тирования, который "заслонит" текущий процесс — сеанс работы с интер­претатором Пролога. После того как программист закончит редактирова­ние файла и выйдет из редактора, управление вернется к процессу, с кото­рым связана работа интерпретатора Пролога, и интерпретатор выведет:

да

Если файл "a.pl" уже был просмотрен интерпретатором до ввода при­веденного выше запроса "system", то становится необходимым повтор­ный просмотр этого файла при помощи запроса

| ?— reconsult(' a.pl ').

При обычном двухкратном просмотре интерпретатором одного и того же файла каждая фраза из этого файла будет дважды повторяться в теку­щей программе. Повторный просмотр файла при помощи запроса "re-consult" позволяет избежать этого. При повторном просмотре файла по запросу "reconsult" интерпретатор проверяет каждый предикат из файла на наличие в текущей программе фраз, относящихся к этому предикату (т.е. ищет в программе фразы, обладающие тем же именем и количест­вом аргументов, что и предикат из файла). Если такие фразы отыскива­ются, то интерпретатор удаляет все эти фразы из программы и заменяет их фразами из повторно просматриваемого файла. Таким образом, если программист изменил в файле определение фразы, то в программе новое определение займет место старого.

Для получения максимальной выгоды от использования средства "reconsult" (т.е. для минимизации затрат времени на повторный просмотр) рекомендуется организовывать программу в виде совокупности коротких файлов, а не как один большой файл.

Отладчик

Отладчик СиПролога может выдавать поясняющие сообщения в четы­рех точках выполняемой процедуры:

1) когда анализируется лервая фраза процедуры (сообщение "Call", т.е. "вызов");

2) когда процедура успешно выполнена (сообщение "Exit", т.е. "вы­ход");

3) когда система возвращается назад для рассмотрения второй или следующей фразы процедуры (сообщение "Back to" — "обратно к");

4) когда система достигает конца множества фраз, определяющих процедуру (сообщение "Fail" — "неудача").

Для включения отладчика можно воспользоваться двумя методами. Если ввести команду

| ?- trace.

то отладчик станет выводить максимум отладочной информации при об­работке следующего запроса, т.е. будут печататься сообщения в четырех точках каждой выполняемой процедуры. Если ввести команду

| ?— notrace.

то отладчик выключится.

Другой способ использования отладчика состоит в том, чтобы в од­ну или несколько процедур ввести контрольные точки (spypoints). Тог­да отладчик будет автоматически включаться при вызове процедуры, в которой есть контрольная точка. Например, команда

| ?- spy connects/3.

приведет к тому, что в процедуру "connects/3" будет введена контроль­ная точка. Команда

| ?— nospy connects/3.

удалит эту контрольную точку.

Пример сеанса работы

Приведем пример использования отладчика для наблюдения за выпол­нением простой процедуры. Вопросительный знак в конце строки отладочной информации означает, что пользователь может вводить отладочную команду. В данном примере пользователь нажимает клавишу возврата каретки, а это означает, что отладчик должен продолжить печать отладоч­ной информации с максимальным уровнем детализации.

полет (пиплз, ньюарк, релей).

полет (пиплз, релей, нэшвилл).

| ?— trace.

да

| ?- полет (пиплз, X,Y).

  1. 0 Call: полет (пиплз, __309,_324) ?

(1) 0 Exit: полет (пиплз,ньюарк,релей) ?

Х = ньюарк

Y = релей

  1. 0 Back to -.полет (пиплз, _309, _324) ?

(1) 0 Exit: полет (пиплз,релей,нэшвилл) ?

Х = релей

Y= нэшвилл;

(1) 0 Back to: полет (пиплз, _309,_324) ?

  1. 0 Fail: полет (пиплз, __309, _324) ?

нет

В сообщениях, выдаваемых отладчиком, все переменные выводятся со своими внутренними именами. Когда пользователь набирает символ ; , отказываясь от ответа, то запрос, активированный самым последним, делается неудачным, а все переменные, конкретизированные при успехе этого запроса, превращаются в неконкретизированные. Обратите внима­ние, что отладчик СиПролога отображает такие переменные в неконкрети­зированном виде, когда печатает сообщение "Back to".

Расшифровка строки отладочной информации

Строка отладочной информации:

* (1) 0 Call: полет (пиплз, _309, __324) ? несет следующие сведения:

* означает, что в настоящее время в процедуре "полет/3" установле­на контрольная точка.

(1) — это уникальное обозначение конкретного вызова данной про­цедуры.

0 показывает количество целей — прямых предков для данной кон­кретной подцели. Это, к примеру, позволяет судить о глубине, которой достигла рекурсивная процедура.

Call: показывает, что это точка первоначального входа в процедуру.

полет (пиплз, _309, _324) — это сама подцель.

? — это сообщение-подсказка, означающее, что отладчик ждет ввода отладочной команды.

После включения отладчика командой "trace" или при помощи конт­рольной точки в конце каждой строки отладочной информации будет выдаваться данное сообщение-подсказка, свидетельствующее о возмож­ности ввода команды. Если в ответ пользователь нажмет клавишу возвра­та каретки, то отладчик продолжит выдачу максимально подробной ин­формации. Другие отладочные команды приведены ниже.

Соседние файлы в папке Гл.6,7,Прилож.,Допол