sharky already answered Prolog期望查詢中的已知謂詞以及如何以更好的方式對查詢進行編碼。 但主要是期望像not_sunny
這樣的查詢會因爲Prolog的「封閉的世界假設」而失敗並非不合理:如果沒有指定它,它就不是真的。
如果謂詞不存在就有一個很好的原因:只是在程序中出現拼寫錯誤的情況更爲常見,如果查詢失敗,調試它會非常痛苦。
但如果你真的願意,你可以真正改變與set_prolog_flag/2
謂詞的行爲:
?- not_sunny.
ERROR: toplevel: Undefined procedure: not_sunny/0 (DWIM could not correct goal)
?- set_prolog_flag(unknown,fail).
Warning: Using a non-error value for unknown in the global module
Warning: causes most of the development environment to stop working.
Warning: Please use :- dynamic or limit usage of unknown to a module.
Warning: See http://www.swi-prolog.org/howto/database.html
true.
?- not_sunny.
false.