'SWI-Prolog: Use operators from modules?
I have a prolog-file (name definitions.pl) of this kind of type:
:- module(definitions,[]).
:-op(699, xfx, :=).
:-op(599, xfy, ∪).
C := (A ∪ B) :- union(A, B, C).
My aim is to use this file as module in another file test.pl. To integrate it I tried:
:-use_module(definitions).
But for some reason its not possible to make statements like:
X:=[1,2]∪[3,4].
after loading test.pl into swipl. I also tried:
:- module(definitions,[:=/2, ∪/2]).
:-op(699, xfx, :=).
:-op(599, xfy, ∪).
but this gives some operator exprected
error. What is the correct way to use operators in prolog-modules?
Solution 1:[1]
Move the operator definitions into the module export list:
:- module(definitions, [
(:=)/2, op(699, xfx, :=),
op(599, xfy, ?)
]).
:- use_module(library(lists), [union/3]).
C := (A ? B) :-
union(A, B, C).
Usage example (assuming a definitions.pl
file with the above contents in the current working directory):
?- use_module(definitions).
true.
?- X:=[1,2]?[3,4].
X = [1, 2, 3, 4].
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |