Я программирую в Prolog, и иногда я хочу получить сбой, но вместо этого получаю исключение, которое я не могу понять, почему разница должна быть между ними. Если что-то не может выполнить, это означает, что предикат не преуспел, так что это простой провал. Я что-то упускаю?Зачем бросать исключение в Prolog вместо простого провала?
0
A
ответ
1
Ошибка означает, что то, что вы пытаетесь доказать, неверно. Исключение означает, что то, что вы пытаетесь доказать, не имеет смысла (например, пытается вычислить квадратный корень атома) по какой-либо причине или что вы столкнулись с каким-то системным ограничением (например, исчерпанием доступной памяти).
Но вы можете легко конвертировать любое исключение в отказ в письменной форме:
catch(Goal, _, fail)
Да, я знаю, что вы можете сделать это, но почему это не поведение по умолчанию? Я думаю, это не так просто, и больше, когда вы работаете с не чистой логикой первого порядка. Главным образом мета-функции или метаоператоры. Функциональность может приводить к исключению таким образом, то есть к способу реализации оператора. Что-то, что не должно работать так. – titusfx
Было бы плохой идеей быть поведением по умолчанию. Например. он преобразует любую опечатку в ваш код в сбой вместо ошибки существования. –