在Sicstus Polog:
語法錯誤在number_codes/2 !數字語法 !在0線
在SWI-Prolog的:
ERROR:number_chars/2:語法錯誤:非法數字
number_codes(Number,"m"),
catch(number_codes(Number,List),error(syntax_error(_),_), fail).
如何使它在這個異常返回失敗。
在Sicstus Polog:
語法錯誤在number_codes/2 !數字語法 !在0線
在SWI-Prolog的:
ERROR:number_chars/2:語法錯誤:非法數字
number_codes(Number,"m"),
catch(number_codes(Number,List),error(syntax_error(_),_), fail).
如何使它在這個異常返回失敗。
用於捕捉語法錯誤的ISO方法是編寫:
catch(number_codes(Number,"m"),error(syntax_error(_),_), fail).
第一個參數是要保護的目標,第二個參數是要捕獲的模式。在這種情況下,你想捕獲一個錯誤。錯誤的形式爲error(E,_)
,其中第一個參數是具體的錯誤術語,在這種情況下爲syntax_error(_)
。第二個參數是實現定義的。所以你不能依賴它的精確格式。
從來沒有只是抓住一切(如@CapelliC)建議。以這種方式,您可能會無意中隱藏一些意外錯誤。
這應該是正確的語法爲 '丟棄' 異常
?- catch(number_codes(X,"m"),_,true).
true.
?- catch(number_codes(X,"m"),_,false).
false.
檢查錯誤的詳細信息,請
?- catch(number_codes(X,"m"),error(E,C),(writeln(E:C),false)).
syntax_error(illegal_number):context(number_codes/2,_G12951)
false.
(我在SWI-Prolog的測試...)
我從來沒有使用'catch',但根據這裏的文檔http://www.swi-prolog.org/pldoc/man?predicate=catch/3它是一個元調用像調用,所以你不需要早先調用number_codes – rano