私はオペレータ#
定義している:私はtrueを返します述語check/1
を書きたいPrologで構文エラーを検出する方法はありますか?
valid(X):- integer(X).
valid(X # Y):- valid(X), valid(Y).
:私は用語がよく形成されているかどうかを確認するには、次の規則に書かれている
:- op(500, yfx, #).
をその引数が有効な場合はfalse、そうでない場合はfalse私はこれを書いた:
check(Exp):- catch(valid(Exp), error(syntax_error(_),_), fail), !.
Expが整形式のときに真を返します。それは非合法であるときしかし、それは構文エラーをキャッチしません:
?- 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に戻すにはどうすればよいですか?あなたのケースでは