SWI-Prolog:使用模块中的运算符?
SWI-Prolog: Use operators from modules?
我有一个这种类型的序言文件(名称definitions.pl):
:- module(definitions,[]).
:-op(699, xfx, :=).
:-op(599, xfy, ∪).
C := (A ∪ B) :- union(A, B, C).
我的目标是将此文件用作另一个文件中的模块 test.pl。为了整合它,我尝试了:
:-use_module(definitions).
但由于某些原因,无法做出如下陈述:
X:=[1,2]∪[3,4].
将 test.pl 加载到 swipl 后。我也试过:
:- module(definitions,[:=/2, ∪/2]).
:-op(699, xfx, :=).
:-op(599, xfy, ∪).
但这会产生一些 operator exprected
错误。在序言模块中使用运算符的正确方法是什么?
将运算符定义移动到模块导出列表中:
:- module(definitions, [
(:=)/2, op(699, xfx, :=),
op(599, xfy, ∪)
]).
:- use_module(library(lists), [union/3]).
C := (A ∪ B) :-
union(A, B, C).
使用示例(假设当前工作目录下有一个包含上述内容的definitions.pl
文件):
?- use_module(definitions).
true.
?- X:=[1,2]∪[3,4].
X = [1, 2, 3, 4].
我有一个这种类型的序言文件(名称definitions.pl):
:- module(definitions,[]).
:-op(699, xfx, :=).
:-op(599, xfy, ∪).
C := (A ∪ B) :- union(A, B, C).
我的目标是将此文件用作另一个文件中的模块 test.pl。为了整合它,我尝试了:
:-use_module(definitions).
但由于某些原因,无法做出如下陈述:
X:=[1,2]∪[3,4].
将 test.pl 加载到 swipl 后。我也试过:
:- module(definitions,[:=/2, ∪/2]).
:-op(699, xfx, :=).
:-op(599, xfy, ∪).
但这会产生一些 operator exprected
错误。在序言模块中使用运算符的正确方法是什么?
将运算符定义移动到模块导出列表中:
:- module(definitions, [
(:=)/2, op(699, xfx, :=),
op(599, xfy, ∪)
]).
:- use_module(library(lists), [union/3]).
C := (A ∪ B) :-
union(A, B, C).
使用示例(假设当前工作目录下有一个包含上述内容的definitions.pl
文件):
?- use_module(definitions).
true.
?- X:=[1,2]∪[3,4].
X = [1, 2, 3, 4].