Article View: comp.lang.prolog
Article #3336Re: Ranges of values in Cprolog
From: Richard A. O'Keefe
Date: Mon, 09 May 1988 03:35
Date: Mon, 09 May 1988 03:35
71 lines
4001 bytes
4001 bytes
In article <467@cmx.npac.syr.edu>, hamid@hilbert.uucp (Hamid Bacha) writes:
> In article <944@cresswell.quintus.UUCP> ok@quintus.UUCP (Richard A. O'Keefe) writes:
> >In article <451@cmx.npac.syr.edu>, hamid@hilbert.uucp (Hamid Bacha) writes:
> >In an Edinburgh-compatible Prolog, "- <number> is a special case; the
> >"-" here is the tightest binding operator and is not disabled by
> > :- op(0, fy, -).
> >which cancels the usual unary minus. Thus after doing
> In C-Prolog (version 1.5) unary '-' is defined as op(fx, 500, -) and does
> not bind tighter than operators with higher precedence (lower precedence
> number). It is treated as a special case in that -1 is negative integer 1
> instead of -(1). A simple example using C-Prolog proves it:
(1) Surely that's op(500, fx, -).
> C-Prolog version 1.5
> | ?- op(400, xfx, ..).
> | ?- assert(p(-1 .. 2)).
> | ?- p(-X).
> X = 1..2
> This is clearly different from '..'(-1,2) which Richard claims it should be.
> The same behavior is observed with ALS-Prolog (the other system I have
> access to in addition to our own Columbus Prolog and MetaProlog).
(2) If this really is the case, it is a bug. (C Prolog is known to take
a few short-cuts with operators.)
The test case which is supposed to make it all clear is
x^ -2
If current_op(200, xfy, ^) and current_op(500, fx, -) (as is normally
the case), this would be illegal, and you should find that
x^ -y
IS illegal. - <number> being a special case, however, x^ -2 means
the same as x^ (-2).
(3) Believe it or not, there is method in't. The idea is to simplify the
*output* routines. We would like writeq(X) to be able to say "oh, X
is a number, I'll just write it", whatever the surrounding context,
rather than sometimes having to write a negative number as (-4) or
whatever.
It could be argued that having -<number> treated specially is a bad
idea, and that it would be better to have it parsed as an ordinary
operator and then treated specially when operator and operand are
combined. However, in DEC-10 Prolog, all operators can have their
priority reassigned, and all operators can be cancelled by assigning
priority 0, so there has to be something special about -<number> or
it would be possible to get into a state where negative numbers could
not be entered.
(4) I have just received a copy of ALS Prolog version 1.0 for the
Macintosh SI and MAc II. I tried
write(-(5))
and writeq(-(5))
in it. Both printed "-5", which is quite wrong. writeq/1 is supposed
to write something so that it can be read back, so writeq(-(5)) ought
to write -(5) or (-(5)) or '-'(5) or -((5)) or - (5) or almost anything
BUT -5. I think it's fair to call this a bug.
ALS Prolog fails to report the syntax error in (x^ -y) although this
is clearly illegal according to the table on p42 and the last two
paragraphs of section 5.7. While it does indeed parse -1..2
(incorrectly) as -(1..2), it parses 1.. -2 as ..(1,-2) which ought to
be illegal if - doesn't have lower rank than .. . This inconsistency
does not seem desirable.
There is much to admire in ALS Prolog, and I don't want to give anyone
a bad impression of it. I just want to point out that its I/O is (in
this *specific* release) at least as buggy as that of C Prolog, and it
should not be cited to prove what "Edinburgh syntax" is.
[That is what the public-domain parser is for.]
Technical Details
Message-ID:
<950@cresswell.quintus.UUCP>Path:
arc1-ca.pugleaf.net!utzoo!mnetor!uunet!seismo!sundc!pitstop!sun!quintus!okReferences:
<242@yetti.UUCP> <451@cmx.npac.syr.edu> <944@cresswell.quintus.UUCP> <467@cmx.npac.syr.edu>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!mnetor!uunet!seismo!sundc!pitstop!sun!quintus!ok From: ok@quintus.UUCP (Richard A. O'Keefe) Newsgroups: comp.lang.prolog Subject: Re: Ranges of values in Cprolog Message-ID: <950@cresswell.quintus.UUCP> Date: 9 May 88 03:35:40 GMT References: <242@yetti.UUCP> <451@cmx.npac.syr.edu> <944@cresswell.quintus.UUCP> <467@cmx.npac.syr.edu> Organization: Quintus Computer Systems, Mountain View, CA Lines: 71