【问题标题】:hoofers club in prologprolog 中的 hoofers 俱乐部
【发布时间】:2019-03-17 14:19:39
【问题描述】:

我很确定我声明的事实如下:

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). 进行查询时,它会返回以下错误消息:

uncaught exception: error(existence_error(procedure,climber/1),top_level/0)

我在这里错过了什么?

【问题讨论】:

  • 定义not/1很麻烦!

标签: prolog logic


【解决方案1】:

climber/1 没有任何子句,因此 Prolog 运行时不知道谓词。因此,您的查询存在谓词存在错误。一种可能的解决方案是将诸如skier/1climber/1 之类的谓词声明为动态

:- dynamic([climber/1, skier/1]).

该指令向运行时声明谓词,通知它可以在运行时修改谓词。这将使您的查询失败而不是抛出异常。

【讨论】:

  • @LeeMerlas 只需在源文件顶部添加指令即可。
  • 它现在可以工作了,但它应该输出'Ellen',而不是输出'no'
猜你喜欢
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 2021-08-05
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多