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.