[Fwd: Re: Any Prolog language lawyer out there?]

-------- Original Message -------- Subject: Re: Any Prolog language lawyer out there? Date: 19 Oct 2004 22:51:02 +0200 From: Jens Kilian jjk@acm.org Organization: 1&1 Internet AG Newsgroups: comp.lang.prolog References: 41750912.8040102@cs.unipr.it 1098196164.417498@seven.kulnet.kuleuven.ac.be slrncnaat8.jkn.jan@ct.xs4all.nl
Jan Wielemaker jan@ct.xs4all.nl writes:
| ?- functor(- 4,X,Y). X = -4, Y = 0 ?
I think this is a mistake. Reading "Prolog, the standard", I find (p. 230) that an integer is an integer token, which is defined as a sequence of digits (besides binary, octal, etc). If this is really true, than negative numbers cannot be represented and only get their property when passed to one of the arithmetic predicates.
My copy of a draft version of the standard (ISO/IEC JTC1 SC22 WG17 N110) says
6.3.1.2 Negative numbers
term = atom, integer; Abstract: -n - n Priority: 0
term = atom, float number; Abstract: -r - r Priority: 0
The prefix operator - with a numeric constant as operand denotes the corresponding negative constant.
This explicitly codifies the interpretation of '- 4' seen above.
I think this is undesirable. For one thing, on engines using fixed with 2-complements representation (allowed!) one must write the smallest integer as (-2147483647-1) !?
No. I can see nothing in the (draft) standard which restricts the range of an 'integer' token; as I interpret it, a Prolog implementation using 16-bit integers is free to accept '- 32768' as a valid term and to reject '32768' as causing an integer overflow.
Also, one always needs is/2 to represent a negative integer.
No, the parser has to convert negative numbers.
So, the tokeniser should deal with '-'{digit}+. The situation for + is a bit less clear as it is not _needed_ to represent positive integer terms.
The tokenizer *cannot* consume the '-' in front of a number, because it may need to be interpreted as an operator. Not even the presence or absence of whitespace helps:
X is Y-4. X is Y - 4.
These must both be interpreted as is(X, -(Y, 4)).
Yes, this sucks. As does most of Prolog's syntax ;-)
Jens.
participants (1)
-
Roberto Bagnara