module - 如何在 swi-prolog 中导入运算符?

标签 module prolog swi-prolog

我有以下文件:

:- use_module(library(clpfd)).

isPowTwo(N) :- N #> 0, N #= 2^_.

一切正常:

?- [importTest].
%     library(pairs) compiled into pairs 0.00 sec, 22 clauses
%    library(lists) compiled into lists 0.01 sec, 122 clauses
%    library(occurs) compiled into occurs 0.00 sec, 14 clauses
%   library(apply_macros) compiled into apply_macros 0.01 sec, 168 clauses
%   library(assoc) compiled into assoc 0.01 sec, 103 clauses
%  library(clpfd) compiled into clpfd 0.15 sec, 2,808 clauses
% importTest compiled 0.16 sec, 2,813 clauses
true.

现在我只想导入两个使用过的运算符:

:- use_module(library(clpfd), [(#>)/2, (#=)/2]).

isPowTwo(N) :- N #> 0, N #= 2^_.

它不起作用:

?- [importTest].
%     library(pairs) compiled into pairs 0.00 sec, 22 clauses
%    library(lists) compiled into lists 0.01 sec, 122 clauses
%    library(occurs) compiled into occurs 0.00 sec, 14 clauses
%   library(apply_macros) compiled into apply_macros 0.01 sec, 168 clauses
%   library(assoc) compiled into assoc 0.01 sec, 103 clauses
%  library(clpfd) compiled into clpfd 0.16 sec, 2,808 clauses
ERROR: .../importTest.pl:3:17: Syntax error: Operator expected
% importTest compiled 0.16 sec, 2,812 clauses
true.

?- isPowTwo(1).
ERROR: toplevel: Undefined procedure: isPowTwo/1 (DWIM could not correct goal)

#>#= 两边保留括号没有什么区别。

最佳答案

您的 use_module/2 指令中存在语法错误(因此出现 Syntax error: Operator Expected 错误消息)。您可以通过编写以下内容来更正它:

:- use_module(library(clpfd), [(#>)/2, (#=)/2]).

但是您还需要导入相应的运算符,以便在 isPowTwo/1 谓词的定义中使用:

:- use_module(library(clpfd), [(#>)/2, (#=)/2, op(700,xfx,(#>)), op(700,xfx,(#=))]).

关于module - 如何在 swi-prolog 中导入运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39330488/

相关文章:

Python导入错误: No module named pybluez

javascript - 为什么我的 dojo modulePaths 配置被忽略了?

Python:如何跨模块使用变量

javascript - 如何使用 Webpack 在 JS/TS 中只导入一小部分 npm 模块?

prolog - 如何将属性附加到术语上?

Prolog:如何对来自 shell 的输入执行术语扩展?

Prolog:解压缩对列表

prolog - 接受2种不同的颜色,但不接受相同的颜色

binaryfiles - 在机器上没有安装 swipl 的情况下运行 SWI-Prolog 二进制文件

prolog - 退出 SWI Prolog 中的所有错误