Joachim Schimpf schrieb:
>> ?- X = 3m^4.
>> >Error: Parenthesis ("(") before operator missing.
>> >X = 3m^4.
>> > ^
>> >But I guess the dark forces are also strong with
>> >these Prolog systems that are more tolerant.
> Nothing to do with tolerance. You want 3m^4 to be equivalent
> to 3*(m^4) and you can't have that with Prolog syntax.
Oh, now I see, I was adopting your operator level.
If I use a different operator level, I don't
get an error anymore on my side, but its still
not usable, since m refers to 3 and is not captured
by the (^)/2:
Jekejeke Prolog, Development Environment 0.9.12
(c) 1985-2013, XLOG Technologies GmbH, Switzerland
?- op(100,yf,m).
Yes
?- X = 3m.
X = 3 m
?- X = 3m^7.
X = 3 m^7
?- X = 3m^7, write_canonical(X).
^(m(3),7)X = 3 m^7
Now I understand why you did use the operator level
300. Oki Doki.
If I try a Prolog system that I dub tolerant,
I get some strange result:
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.1.0)
Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam
?- op(300,yf,m).
true.
?- X = 3m^4.
X = 3^4 m.
?- X = 3m^4, write_canonical(X).
m(^(3,4))
X = 3^4 m.
My expectation would be that m is postfix of 3,
in case the prolog system is tolerant. What
is going on here?
Bye