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

Применение предиката inkey

В заключение данного раздела мы дадим пример использования стандарт-

ного предиката inkey, который имеет вид

inkey(CharParam)

Если клавиша была нажата дважды с того момента, как была выполнена

последняя операция чтения, то предикат inkey присваивает переменной

CharParam значение кода ASCII нажатой клавиши. Если ни одна клавиша не

нажата, то выполнение inkey завершается неудачно. Таким образом предикат

inkey, в отличие от readchar, позволяет продолжить выполнение программы

даже тогда, когда клавиша не была нажата.

В приведенном ниже примере предикаты inkey и time используются для

оценки времени реакции программиста.

/* Program CH18EX10.PRO */

predicates

wait(char)

equal(char, char)

test(string)

goal

makewindow(3, 7, 0, "", 0, 0, 25, 80),

makewindow(2, 7, 7, "Key to press now", 2, 5, 6, 70),

makewindow(1, 7, 7, "Accepted letters", 8, 10, 10, 60),

Word = "Peter Piper picked a peck of pickled peppers",

write("Please type :\n\t", Word,"\n\t"),

time(0, 0, 0, 0), test(Word),

time(_, _, S, H),

shiftwindow(1),

write("\nYou took ", S, " seconds and ", H, " hundredths").

clauses

wait(X) :- inkey(Y), equal(X, Y).

wait(X) :- shiftwindow(2), write(X), wait(X).

test(W) :- frontchar(W, Ch, R), wait(Ch),

shiftwindow(2), write(Ch), test(R).

test("").

equal(X, X) :- !.

equal(_, _) :- beep, fail.

Глава 19. Сложные приемы программирования

В этой главе рассматриваются более сложные вопросы; мы полагаем, что

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

программистом. В этой главе мы сначала рассмотрим обработку исключитель-

ных ситуаций и прерывания, связанные с ошибками. Затем мы покажем, как в

Турбо Прологе выполняется анализ потока параметров, и как этот процесс

можно контролировать при помощи стандартных предикатов free и bound. Мы

также рассмотрим ссылочный тип (reference), как им пользоваться и как от-

делять переменные этого типа от других переменных. Глава заканчивается

рассмотрением ряда вопросов, связанных со стилем программирования и повы-

шением эффективности ваших программ.

Ошибки, исключительные ситуации и прерывания

В Турбо Прологе предусмотрен ряд стандартных предикатов, обеспечива-

ющих широкие возможности по обработке ошибок, исключительных ситуаций и

прерываний, возникающих во время выполнения вашей программы. Вы можете

обрабатывать ошибки и исключительные ситуации, управлять работой клавиши

Break и даже написать вашу собственную версию описания предикатов, пред-

назначенных для обработки критических ошибок и ошибок, связанных с вво-

дом/выводом данных из файлов.

Обработка исключительных ситуаций, связанных с ошибками

В Турбо Прологе реализован мощный механизм для обработки исключи-

тельных ситуаций и прерываний, связанных с ошибками. В основу этого меха-

низма положены предикат trap, с помощью которого отлавливаются ошибки в

процессе работы программы и предикат exit, с помощью которого обрабатыва-

ются исключительные ситуации.

Вы можете также использовать этот механизм для реагирования на ком-

бинацию клавиш Ctrl-Break.

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