代码之家  ›  专栏  ›  技术社区  ›  Lee Merlas

足球俱乐部

  •  0
  • Lee Merlas  · 技术社区  · 7 年前

    我很肯定我所说的事实,这些事实如下:

    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)
    

    我错过了什么?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Paulo Moura    7 年前

    你没有任何条款 climber/1 因此Prolog运行时不知道谓词。因此,查询的谓词存在错误。可能的解决方案是声明谓词,如 skier/1 登山者/1 作为 动态 :

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

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

    推荐文章