基本示例中的 Prolog existence_error 过程
Prolog existence_error procedure in basic example
我正在尝试学习 Prolog 的基础知识,并使用以下代码将 运行 保持为 existence_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).
在执行 does_come_after(m1, m3) 等查询时,我不断收到以下错误。
uncaught exception: error(existence_error(procedure,comes_after/0),does_come_after/0)
这是显示错误的屏幕截图:
Prolog Error
我做错了什么,我应该记住什么以避免将来出现这些错误?提前致谢。
错误消息告诉您 Prolog 需要谓词 comes_after/0
,但找到了 none。此外,当从谓词 does_come_after/0
调用时会出现此问题。现在,您的定义都使用 arity 2。因此 comes_after/2
和 does_come_after/2
。所以系统期望的事情不会发生。
如果是,那一定与你的安装有关。你有 1.4.5,这是最新的版本,1.4.4 仍然是当前稳定的。
因此,您可能安装了另一个较旧的系统,它通过提供不兼容的 pl2wam
编译器进行干扰。要验证这一点,请说 which pl2wam
或 pl2wam --version
。
特别是 1.3 甚至 1.2 的版本可能会产生这样的结果。 GNU 中没有对此进行版本检查。
为确保我始终获得正确的版本,我说:
export PATH=/opt/gupu/gprolog-1.4.5/bin:${PATH}
很遗憾,这是 1.4.5 版本的问题。
幸运的是,您可以使用一个技巧来代替降级:
除了在 gprolog 中使用 consult(file_name),您可以 运行 在您的终端上(在 gprolog 之外)使用此命令
gplc file_name.pl
它将输出一个可执行文件,您可以通过
运行
./file_name
应该可以解决你存在错误的问题。
我正在尝试学习 Prolog 的基础知识,并使用以下代码将 运行 保持为 existence_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).
在执行 does_come_after(m1, m3) 等查询时,我不断收到以下错误。
uncaught exception: error(existence_error(procedure,comes_after/0),does_come_after/0)
这是显示错误的屏幕截图:
Prolog Error
我做错了什么,我应该记住什么以避免将来出现这些错误?提前致谢。
错误消息告诉您 Prolog 需要谓词 comes_after/0
,但找到了 none。此外,当从谓词 does_come_after/0
调用时会出现此问题。现在,您的定义都使用 arity 2。因此 comes_after/2
和 does_come_after/2
。所以系统期望的事情不会发生。
如果是,那一定与你的安装有关。你有 1.4.5,这是最新的版本,1.4.4 仍然是当前稳定的。
因此,您可能安装了另一个较旧的系统,它通过提供不兼容的 pl2wam
编译器进行干扰。要验证这一点,请说 which pl2wam
或 pl2wam --version
。
特别是 1.3 甚至 1.2 的版本可能会产生这样的结果。 GNU 中没有对此进行版本检查。
为确保我始终获得正确的版本,我说:
export PATH=/opt/gupu/gprolog-1.4.5/bin:${PATH}
很遗憾,这是 1.4.5 版本的问题。
幸运的是,您可以使用一个技巧来代替降级:
除了在 gprolog 中使用 consult(file_name),您可以 运行 在您的终端上(在 gprolog 之外)使用此命令
gplc file_name.pl
它将输出一个可执行文件,您可以通过
运行 ./file_name
应该可以解决你存在错误的问题。