Ich habe einen Operator #
definiert:Wie kann ich einen Syntaxfehler in Prolog abfangen?
:- op(500, yfx, #).
ich die folgenden Regeln geschrieben haben zu prüfen, ob ein Begriff wohlgeformt ist:
valid(X):- integer(X).
valid(X # Y):- valid(X), valid(Y).
ich ein Prädikat check/1
schreiben wollen, die wahre zurückkehren wenn das Argument gültig ist und andernfalls falsch. Ich schrieb dies:
check(Exp):- catch(valid(Exp), error(syntax_error(_),_), fail), !.
Es gibt wahr, wenn Exp ist wohlgeformt. Allerdings ist es nicht die Syntaxfehler fangen, wenn es nicht legal:
?- check(5 ## 6).
ERROR: [Thread pdt_console_client_0_Default Process] Syntax error: Operator expected
ERROR: [Thread pdt_console_client_0_Default Process] check(5
ERROR: [Thread pdt_console_client_0_Default Process] ** here **
ERROR: [Thread pdt_console_client_0_Default Process] ## 6) .
ich SWI-Prolog version 7.4.1 for amd64
verwende.
Wie kann ich den Syntaxfehler abfangen und check
false zurückgeben, wenn ein Fehler ausgelöst wird?