Debugging Prolog存在错误异常

Debugging Prolog存在错误异常,debugging,exception,prolog,Debugging,Exception,Prolog,首先,我不是prolog程序员。我正在为学校做一项作业,我们在那里建立了一个小型专家系统。我选择使用prolog来完成作业,我遵循这本书:。具体来说,我在看第二章 在这本书中,我想使用一个叫做“询问”的程序。它可以在第14页找到。提问,使用另一个称为“已知”的过程来记住问题的答案。我基本上复制了这个过程以在代码中使用,但是我得到了一个与“已知”过程相关的存在错误。我不是一个prolog程序员,我不知道如何调试它。希望有人能帮忙 以下是我的代码运行示例: | ?- species(X). unca

首先,我不是prolog程序员。我正在为学校做一项作业,我们在那里建立了一个小型专家系统。我选择使用prolog来完成作业,我遵循这本书:。具体来说,我在看第二章

在这本书中,我想使用一个叫做“询问”的程序。它可以在第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文档告诉您如何声明动态谓词。你可能想通读一遍潜伏者

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