2015-10-06 2 views
0

Я программирую в Prolog, и иногда я хочу получить сбой, но вместо этого получаю исключение, которое я не могу понять, почему разница должна быть между ними. Если что-то не может выполнить, это означает, что предикат не преуспел, так что это простой провал. Я что-то упускаю?Зачем бросать исключение в Prolog вместо простого провала?

ответ

1

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

Но вы можете легко конвертировать любое исключение в отказ в письменной форме:

catch(Goal, _, fail) 
+0

Да, я знаю, что вы можете сделать это, но почему это не поведение по умолчанию? Я думаю, это не так просто, и больше, когда вы работаете с не чистой логикой первого порядка. Главным образом мета-функции или метаоператоры. Функциональность может приводить к исключению таким образом, то есть к способу реализации оператора. Что-то, что не должно работать так. – titusfx

+2

Было бы плохой идеей быть поведением по умолчанию. Например. он преобразует любую опечатку в ваш код в сбой вместо ошибки существования. –