Я хочу, чтобы механизм пролога возвращал false вместо ошибки. У меня есть этот код:Игнорировать ошибки типа в прологе и возвращать false вместо
:-use_module(library(clpfd)).
set_1(X):-member(X,[f(f(1))]).
p :- X in 1..3,set_1(f(X)).
Когда я запрашиваю р, я получаю ошибку:
?- p.
ERROR: Type error: `integer' expected, found `f(1)'
Я хочу выход выглядеть следующим образом:
?- p.
false
я ожидал увидеть false, даже если я меняю член (X, [f (f (1))]) на член (X, [f (f (f (1)))]) или на какой-либо другой набор, не внося никаких других изменений в моя программа.
Я использую SWI-Пролог v 5.10.4
Спасибо, это помогает. К сожалению, в некоторых случаях поведение возврата false в случае ошибки не является ожидаемым. Рассмотрим set_1 (X): - член (X, [f (f (1)), f (1)]). Ответ должен быть правдой, но он возвращает false, потому что есть ошибка в сопоставлении с первым аргументом. Я закончил реализацию моей собственной функции-члена, которая всегда работает. –