我很肯定我所说的事实,这些事实如下:
hoof(tony). hoof(tim). hoof(ellen). hoof(X) :- skier(X); climber(X). not(likes(X, rain)) :- climber(X). likes(X, snow) :- skier(X). likes(tony, X) :- \+likes(ellen, X). likes(ellen, X) :- \+likes(tony, X). likes(tony, rain). likes(tony, snow).
当我试图询问 hoof(X), climber(X), \+skier(X). ,返回错误消息:
hoof(X), climber(X), \+skier(X).
uncaught exception: error(existence_error(procedure,climber/1),top_level/0)
我错过了什么?
你没有任何条款 climber/1 因此Prolog运行时不知道谓词。因此,查询的谓词存在错误。可能的解决方案是声明谓词,如 skier/1 和 登山者/1 作为 动态 :
climber/1
skier/1
登山者/1
:- dynamic([climber/1, skier/1]).
此指令向运行时声明谓词,通知它可以在运行时修改谓词。这将使查询失败,而不是引发异常。