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].