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