处理导致编译失败的动态谓词



我正在尝试运行一个示例GNU Prolog程序,在我的课程工作中用作示例。代码直接从https://www.cpp.edu/~jrfisher/www/prolog_tutorial/2_17pl.txt中提取,并由我的教授在某一点上显示工作。

但是,当我运行所提供的示例代码时,我得到以下编译警告:
| ?- consult('C:/Users/Chase/Desktop/Prolog files/newAnimal.pro').
compiling C:/Users/Chase/Desktop/Prolog files/newAnimal.pro for byte code...
C:/Users/Chase/Desktop/Prolog files/newAnimal.pro:74:12: syntax error: . or operator expected after expression
1 error(s)
compilation failed

使程序不能正确编译的行是:

:- dynamic yes/1,no/1.

我在这里读到的:https://www.swi-prolog.org/pldoc/man?predicate=dynamic/1

然而,尽管我试图重写和重新格式化这一节,我仍然不能使它编译。

关于为什么提供的代码可能无法运行的任何帮助?

我使用的是Windows GUI GNU Prolog控制台V1.4.5

ISO Prolog标准不要求将dynamic(或multifilediscontiguous)声明为操作符。一些系统可以这样做(例如你提到的SWI-Prolog),但GNU Prolog不行。因此,为了确保代码的可移植性,避免使用dynamic作为操作符。写:

:- dynamic(yes/1).
:- dynamic(no/1).

或:

:- dynamic((yes/1, no/1)).

或:

:- dynamic([yes/1, no/1]).

这些是将多个谓词声明为动态的符合标准的替代方法。

同时,GNU Prolog有一个很好的手册(它的安装的一部分),当你使用GNU Prolog时应该参考。

相关内容

  • 没有找到相关文章

最新更新