【问题标题】:prolog, exshell, known predicate?prolog,exshell,已知谓词?
【发布时间】:2019-06-15 10:14:18
【问题描述】:

我正在尝试使用从https://www.cs.unm.edu/~luger/ai-final/code/PROLOG.exshell_full.html 获得的代码在 Gprolog 下使用 ExShell 实现专家系统。但是,我不断收到错误:

uncaught exception: error(existence_error(procedure,known/2),solve/0)

我唯一需要更改的是第 334-335 行:

write_premise(not Premise) :-
    !, write('     '), write(not),write(' '), write(Premise),nl.

write_premise(\+ Premise) :-
    !, write('     '), write(\+),write(' '), write(Premise),nl.

我正在使用他们的汽车诊断示例对其进行测试。我不确定我是否可以做些什么来解决这个问题,或者是否有人知道我可以在哪里获取一些适用于 gprolog 的 ExShell 源代码。

【问题讨论】:

  • 以防万一您想知道为什么需要这么多 write/1 调用来完成如此简单的工作:它们不是!考虑改用format/2。例如:format(" \\+ ~w\n", [Premise])

标签: prolog expert-system


【解决方案1】:

您需要使用指令将know/2 谓词声明为动态谓词:

:- dynamic(know/2).

【讨论】:

  • 这确实解决了问题。作为旁注,我确实安装了 swi-prolog 并在那里进行了测试,同样的问题发生了,这也解决了它。此外,谓词retractall 也需要更改以在 gprolog 和 swi-prolog 中工作。之后,汽车演示完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多