Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Окно Редактора ( Edit Window )

Опция Edit Window определяет, будет ли Турбо Пролог показывать каж-

дый шаг выполнения в окне Edit (Редактор). Если опция Edit Window уста-

новлена в Off (а опция Trace Window в On), вывод трассировки будет нап-

равляться в окно Trace и программа будет работать быстрее. При этом нхт

необходимости нажимать клавишу F10.

Примечание: одновременная установка Trace Window и Edit Window в Off

аналогична установке в Off опции Status.

Предикаты, с особым значением в режиме трассировки

Вы можете заметить, что предикат write трассируется не так как дру-

гие предикаты. Сообщения о выполнении CALL и RETURN не появляются. Это

происходит потому, что оператор write обрабатывается компилятором особым

образом.

По этой же причине особым образом в режиме трассировки обрабатывают-

ся некоторые другие предикаты. Это следующие предикаты:

- все операции сравнения (=, -, и т.д.);

- все предикаты, транслируемые особым образом (см. Справочное руко-

водство).

Упражнение по трассировке

Загрузите и запустите программу CH10EX04.PRO, которая определяет

предикат intersect так, что он служит для двух целей. Предполагается, что

следующая цель:

intersect(X, List1, List2).

будет успешна, если X связано со списком целых чисел, который является

общим для List1 и List2, так что:

intersect(X, [1, 2, 3], [2, 3, 4, 5])

успешна, если X связано с [2, 3], а

intersect([2, 3], X, [2, 3, 4, 5])

завершается успешно, если X связано с [2, 3]. Для выяснения, почему прог-

рамма не работает должным образом, можно использовать средства трассиров-

ки Турбо Пролога.

/* Программа CH10EX04.PRO -

Определение предиката с двумя целями */

domains

list = integer *

predicates

member (integer,list)

intersect (list,list,list)

clauses

member (X,[X|_]).

member (X,[_|Y] :- member (X,Y).

intersect([],[],_).

intersect([X|Y],[X|L1],L2) :-

member (X,L2),intersect (Y,L1,L2).

intersect(Y,[_|L1],L2) :-

intersect(Y,L1,L2).

/* Эта программа требует исправлений. */

Директивы компилятора, используемые для отладки

-----------------------------------------------

Турбо Пролог содержит несколько директив компилятора, помогающих вам

в процессе отладки. Директивы компилятора можно поместить в начале прог-

раммы или выбирать их из меню Option/Compiler Directives. Эти директивы

предпишут компилятору при трансляции программы выполнить некоторые дейст-

вия. Директивы отладки Турбо Пролога описаны далее в алфавитном порядке.

Директивы check_determ и nondeterm

Директива check_determ включает проверку неопределенных предложений.

Когда применяется директива check_determ, если предложение в вшей прогрм-

ме неопределеное, Турбо Пролог даст во время компиляции предупреждение.

Чтобы предикаты, которые вы постоили неопределенными, не отмечались,

можно использовать перед описанием таких предикатов директиву nondeterm.

Примечание: Мы настоятельно рхклмендуем вам использовать директиву

nondeterm для описания неопределенных предикатов, когда вы использу-

ете директиву компилятора check4eterm. Это укажет, какие части вашей

программы разработаны так, что она является неопределенной из-за

построения, что сбережет время отладки.

Соседние файлы в папке Документация