Prolog 序言中的胡佛俱乐部
我非常肯定我所宣布的事实,包括:Prolog 序言中的胡佛俱乐部,prolog,logic,Prolog,Logic,我非常肯定我所宣布的事实,包括: 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
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).
当我尝试用蹄子(X)、攀岩者(X)、滑雪者(X)进行查询时,,它返回一条错误消息:
uncaught exception: error(existence_error(procedure,climber/1),top_level/0)
这里缺少什么?您没有任何用于
climper/1
的子句,因此Prolog运行时不知道谓词。因此,查询的谓词存在错误。一种可能的解决方案是将skier/1
和climper/1
等谓词声明为动态的:
此指令向运行时声明谓词,通知它可以在运行时修改谓词。这将使您的查询失败,而不是引发异常。@LeeMerlas只需在源文件的顶部添加该指令即可。它现在可以工作,但它应该输出“Ellen”,但其输出“no”定义
not/1却很麻烦!
:- dynamic([climber/1, skier/1]).