Игнорировать ошибки типа в прологе и возвращать 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
1 ответ:
Используйте
catch/3. Пример:?- catch(p, error(type_error(_,_),_), false). false.Декларативно совершенно нормально заменять ошибки типа на молчаливый отказ, подобный этому. Это не относится к ошибкамсоздания экземпляров , так как ошибка создания экземпляров может обратиться к решениям, когда вы добавляете больше целей, но ошибка типа не может.
Comments