我已經定義了一個運營商#
:如何在Prolog中捕獲語法錯誤?
:- op(500, yfx, #).
我寫了下面的規則來檢查,如果一個術語是合式:
valid(X):- integer(X).
valid(X # Y):- valid(X), valid(Y).
我想寫一個謂語check/1
都將返回true如果它的參數是有效的,否則返回false。我寫到:
check(Exp):- catch(valid(Exp), error(syntax_error(_),_), fail), !.
當Exp是格式正確時,它返回true。然而,當它是不合法的不抓住語法錯誤:
?- 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) .
我使用SWI-Prolog version 7.4.1 for amd64
。
如何發現語法錯誤並在出現錯誤時使check
返回false?