基本示例

时间:2017-11-04 05:34:57

标签: prolog gnu-prolog

我正在尝试学习Prolog的基础知识,并使用以下代码继续运行exists_error。

comes_after(m1, m2).
comes_after(m2, m3).
comes_after(m3, m4).
comes_after(m4, m5).
comes_after(m5, m6).

does_come_after(X, Y) :- comes_after(X, Y).
does_come_after(X, Z) :- comes_after(X, Y), does_come_after(Y, Z).

执行诸如do_come_after(m1,m3)之类的查询时,我不断收到以下错误。

uncaught exception: error(existence_error(procedure,comes_after/0),does_come_after/0)

这是显示错误的屏幕截图:

Prolog Error

我做错了什么,为了避免将来出现这些错误,我应该记住什么?提前谢谢。

2 个答案:

答案 0 :(得分:4)

错误消息告诉您Prolog需要谓词comes_after/0,但没有找到。此外,从谓词does_come_after/0调用时会出现此问题。现在,您的定义都使用了arity 2.因此comes_after/2does_come_after/2。所以系统期望不会发生什么。

如果确实如此,则必须与您的安装相关。您有1.4.5这是最新版本,1.4.4仍然是当前稳定。

因此,您可能安装了另一个较旧的系统,该系统通过提供不兼容的pl2wam编译器进行干扰。要验证这一点,请说出which pl2wampl2wam --version

特别是,1.3或甚至1.2的版本可能会产生这样的结果。在GNU中没有对此进行版本检查。

为了确保我总是得到正确的版本,我说:

 export PATH=/opt/gupu/gprolog-1.4.5/bin:${PATH}

答案 1 :(得分:0)

不幸的是,这是1.4.5版本的问题。

幸运的是,您可以执行以下操作,而不是降级:

您可以在终端(gprolog外部)上运行此命令,而不是在gprolog中使用Consult(file_name)

    gplc file_name.pl

它将输出可执行文件,您可以通过

运行
    ./file_name

它将解决您的存在错误问题。