如何在 swi-prolog 中导入运算符?
Howto import operators in 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,(#=))]).
我有以下文件:
:- 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,(#=))]).