Prolog Noob:SWI-Prolog中的约束编程库或语法问题

时间:2011-04-08 12:33:20

标签: prolog clpfd

我只想在SWI-Prolog中找出约束编程,看看本教程:http://en.wikibooks.org/wiki/Prolog/Constraint_Logic_Programming

然而,我似乎陷入了第一道障碍。

?- use_module(library(clpfd)).
true.

?- X #> Y, X in 1..3, Y=2.
ERROR: Syntax error: Operator expected
ERROR: X 
ERROR: ** here **
ERROR: #> Y, X in 1..3, Y=2 . 
?- 

这里出了什么问题?我似乎已经包含了库,但是教程中的第一个示例行会引发语法错误。

我能找到的所有教程似乎都使用#=,#<等运算符但是我的SWI-Prolog对他们不屑一顾。它们是约束库附带的额外语法吗? (而且我没有加载它?)

或者我误读了教程示例?

更新:尝试从Horsh的回复中了解相关信息。如果我使用库并在交互式终端中运行该行,我可以使其工作。但是如果我尝试导入库并在源文件中使用这些运算符,那么它会再次抛出错误。我不理解的是什么?

更新2:

行。如果,在我的源文件中,我调用库,然后编写包含#>的规则。然后我尝试从命令行咨询它。它会抛出一个错误和#>语法是不可识别的。如果在尝试咨询程序之前将库导入命令行,则可以正常工作。这可能是对的吗?

3 个答案:

答案 0 :(得分:12)

根据Horsh的回答,您应该在源代码中导入库,记住将?-放在行的开头,如下所示:

?- use_module(library(clpfd)).

?-告诉SWI-Prolog执行该行,就像它直接输入解释器一样,而不是试图将它声明为程序中的谓词。

不要担心SWI-Prolog不止一次导入库,它知道检查库是否被修改,只有在上次加载库后才重新加载它。

答案 1 :(得分:8)

对于将来发现此问题的其他人,如果要在SWI-Prolog源文件中导入库,以下内容也可以使用:

:- use_module(library(clpfd)).

请注意:-而非?-

答案 2 :(得分:-1)

全部在手册herethere中。

?- [library(clpfd)].
%   library(error) compiled into error 0.00 sec, 10,128 bytes
%  library(apply) compiled into apply 0.00 sec, 16,840 bytes
%  library(assoc) compiled into assoc 0.00 sec, 13,132 bytes
%  library(lists) compiled into lists 0.00 sec, 14,332 bytes
%  library(pairs) compiled into pairs 0.00 sec, 5,372 bytes
% library(clpfd) compiled into clpfd 0.05 sec, 392,604 bytes
true.

?- X #> Y, X in 1..3, Y=2.
X = 3,
Y = 2.