Не удается получить сообщение об исключении - PullRequest
0 голосов
/ 24 августа 2011

Я использую swi-пролог и пытаюсь использовать обработку исключений. У меня есть система вроде

writeAndFail(message)
    :- write(message)
    , fail.

pred(arg1, arg2)
    :- catch(
        real_pred(arg1, arg2), 
        Exception,
        writeAndFail(Exception)
    ).

В теле real_pred я бросаю строку, например, throw('message'). Вызов pred (в подходящем тестовом примере) выдает исключение и правильно его перехватывает, но сообщение никогда не записывается. Как я могу изменить этот код, чтобы печаталось сообщение об исключении?

1 Ответ

1 голос
/ 24 августа 2011

Вы используете строчные термины, где, похоже, вы хотите переменные.

Атом message в предикате writeAndFail есть и всегда будет буквальным атомом message.Он не объединится ни с чем, кроме буквального атома message.
. Вызов writeAndFail(hello) немедленно завершится неудачей, потому что нет предиката, который соответствует.То же самое верно для arg1, arg2 в pred.

Если вы вызываете pred с буквальными аргументами, arg1 и arg2 и если throw действительно выбрасывает литерал 'message', то эти значения должны объединиться, и вы должны увидеть ожидаемые результаты.

В противном случае ваши переменные начинаются с заглавной буквы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...