logo search
TurboProlog / Документация / TOM_2

Ошибочные ситуации в стандартных предикатах

Большинство стандартных предикатов Турбо Пролога выдают сейчас сооб-

щение об ошибках - вместо неудачного завершения - если не могут выполнить

свою функцию. Это означает, что все предикаты выдают сообщения об ошиб-

ках, если не могут быть выполнены. Однако, стандартные предикаты с чисто

логическими значениями завершаются неудачно, если условия ложны.

Например: предикат file_string никогда не завершается неудачно; если

файл не может быть прочитан с диска (или записан), выдается сообщение об

ошибке; однако readint завершается неудачно, если читаемая строка не со-

держит правильного целочисленного значения.

Старый стиль Пролога предполагал, что предикаты всегда завершаются

неудачно, если они не могли быть выполнены. Это влекло за собой ненадеж-

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

программист забывал вставить предложения для отлова ошибки. Это требует

значительно большего времени, чтобы выловить (трассировкой) подобную

ошибку.

Предикаты следовало завершать неудачно (fail), т.к. не было иного

пути поймать ошибку. Это изменено в Турбо Прологе путем введения механиз-

ма ловушек (trap).

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

достаточным образом реагировать на ошибочные ситуации.

Например:

trap(file_str("file.txt", STR), Err, handlerr(Err))

Если вас не заботит обработка ошибки и вы хотите только привести к

неудаче предикат, вы сможете создать такую ситуацию, используя fail в

предикате trap.

trap(file_str("file.txt", STR, _ , fail)