0

我正在尝试运行一个示例 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

4

1 回答 1

2

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 时应该参考它。

于 2021-02-24T09:40:00.993 回答