I am having some problem to use operators that define set-theoretical functions in some .pl-file
with use_module
.
To illustrate that we can take the following test.pl-file:
:- module(test, [
(:=)/2, op(699, xfx, :=),
op(598, xfy, ∪),
op(597, xfy, ∩)
]).
union_((A ∪ B), C, D) :- union_(A, B, X), union_(X, C, D).
union_(A, (B ∪ C), D) :- union_((A ∪ B), C, D).
union_(A, B, C) :- is_list(A), is_list(B), union(A, B, C).
intersection_((A ∪ B), C, D) :- intersection_(A, B, X), intersection_(X, C, D).
intersection_(A, (B ∪ C), D) :- intersection_((A ∪ B), C, D).
intersection_(A, B, C) :- intersection(A, B, C).
C := (A ∪ B) :- union_(A, B, C).
C := (A ∩ B) :- intersection_(A, B, C).
If I now define another file test2.pl with the following code:
:- module(test2,[test2/1]).
:-use_module(test).
test2(A) :- A := [1,2] ∪ [3,4].
it is not possible anymore to call something like that after swipl test2.pl
:
?- C := ([1,2] ∪ [3,4]).
ERROR: Syntax error: Operator expected
ERROR: C := ([1,2]
ERROR: ** here **
ERROR: ∪ [3,4]) .
If I uncomment the line :- module(test2,[test2/1]).
the call gives the desired result:
?- C := ([1,2] ∪ [3,4]).
C = [1, 2, 3, 4].
What is my error of understanding here? How can I give the ∪
in test2 some sense and use :- module(test2,[test2/1]).
also?
Thanks for some quick reply!