Игнорировать ошибки типа в прологе и возвращать false вместо этого



Я хочу, чтобы движок prolog возвращал false вместо ошибки.
У меня есть такой код:



:-use_module(library(clpfd)).

set_1(X):-member(X,[f(f(1))]).
p :- X in 1..3,set_1(f(X)).


Когда я запрашиваю p, я получаю ошибку:



?- p.
ERROR: Type error: `integer' expected, found `f(1)'


Я хочу, чтобы результат выглядел следующим образом:



 ?- p.
false


Я ожидал бы увидеть false, даже если я изменю член (X, [f(f (1))]) на член(X,[f(f(1))]) или на какой-либо другой набор , не внося никаких других изменений в мою программу.



Я использую swi-prolog v 5.10.4

588   1  

1 ответ:

Используйте catch/3. Пример:

?- catch(p, error(type_error(_,_),_), false).
false.

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

Comments

    Ничего не найдено.