【问题标题】:Prolog existence error exceptionProlog存在错误异常
【发布时间】:2023-03-06 19:10:01
【问题描述】:

首先,我不是 prolog 程序员。我正在为我们建立一个小型专家系统的学校做作业。我选择使用 prolog 进行作业,并且正在关注这本书:http://www.amzi.com/distribution/files/xsip_book.pdf。具体来说,我正在看第 2 章。

本书中有一个我想使用的过程,称为“询问”。它可以在第 14 页找到。询问,使用另一个称为“已知”的过程来记住问题的答案。我基本上已经复制了这个过程以在我的代码中使用,但是我遇到了与“已知”过程相关的存在错误。不是prolog程序员,我不知道如何调试它。希望有人可以提供帮助。

这是我的代码运行示例:

| ?- species(X).
uncaught exception: error(existence_error(procedure,known/3),ask/2)

代码如下:

species(limba) :-    %There are a bunch of these
    distribution(west_africa),
    color(tan_with_black_streaks),
    figure(plain),
    janka_hardness(670),
    workability(easy).

distribution(X) :- ask(distribution, X).
color(X) :- ask(color, X).
figure(X) :- ask(figure, X).
janka_hardness(X) :- ask(janka_hardness, X).
workability(X) :- ask(workability, X).    

ask(A, V) :-
    known(yes, A, V),
    !.
ask(A, V) :-
    known(_, A, V),
    !,
    fail.
ask(A, V) :-
    write(A:V),
    write('? : '),
    read(Y),
    asserta(known(Y, A, V)),
    Y == yes.

【问题讨论】:

  • 您想构建一个专家系统,但对编写的语言一无所知?祝你好运。
  • 这个程序期望known/3 是动态的(你指的那本书就是这么说的)。也就是说,它是在运行时创建和管理的。 Prolog 文档告诉您如何声明动态谓词。你可能想通读一遍。
  • 已修复。正如@lurker 所说, known/3 需要是动态的。我添加了:- 动态(已知/3)。到我的代码,它解决了这个问题。谢谢。

标签: debugging exception prolog


【解决方案1】:

这个程序期望known/3 是动态的(你指向的书就是这样说的)。也就是说,它是在运行时创建和管理的。 Prolog 文档告诉您如何声明动态谓词。你可能想通读一遍。 – 潜伏者

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2013-05-17
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    相关资源
    最近更新 更多