Le 5 août 2011 à 09:25, Jasper Taylor a écrit :

> Sorry, I still don't understand.
> 
> OK, I see 'div' and 'mod' are infix operators, 
> (BTW the document you referenced makes no mention of 'mod'), but...

mod/2 is already defined in the initial ISO reference. DTC2 is a corrigendum 
and thus does not redefine all operators.


> 
> Why does this prevent them being read as atoms in GNU-prolog? 
> (It works in other Prologs that also have them as infix operators)

They can be read as atoms but they need to be bracketed. In the presence of 2 
infix operators ISO Prolog requires that the one which is the argument of the 
other (the real operator) be bracketed. This is to avoid misinterpretation. 

Examples:

X = foo. is OK because foo is not an operator. foo is an atom. X = (foo). is 
also OK (but not mandatory). foo is read as an atom.

X = + is not OK because + is an operator. X = (+). is OK and + is read as an 
atom.

Similarly, X = div is not OK because div is now an operator. X = (div) is OK 
and div is read as an atom.

> 
> Is it therefore a bad idea to save application data as Prolog terms, given 
> that changes to the standard may have the effect that future Prolog systems 
> are unable to read them?

If this is really an issue, the best solutions consists in using 
write_canonical which ensures the emitted term can be read back with read/1 
(for this, write_canonical does not use operators).

Daniel

> 
>     --Jasper
> 
> On 05/08/11 07:53, Daniel Diaz wrote:
>> 
>> hello Jasper,
>> 
>> gprolog 1.4.0 follows the "next" Prolog ISO standard (which is in fact a 
>> corrigenum) called DTC2
>> 
>> http://www.complang.tuwien.ac.at/ulrich/iso-prolog/dtc2
>> 
>> in which div is an operator (flooring integer division). As an argument of 
>> an operator you have to write (div). E.g. instead of P = div you have to 
>> write P = (div). This is compatible with         older versions of gprolog.
>> 
>> Daniel
>> 
>> 
>> Le 4 août 2011 à 18:50, Jasper Taylor a écrit :
>> 
>>> | ?- P = div.
>>> uncaught exception: error(syntax_error('user_input:1 (char:5) current or 
>>> previous operator needs brackets'),read_term/3)
>>> 
>>> This is a problem because I cannot read terms written by pre-1.4 versions 
>>> of GNU prolog (or other prologs) including these atoms. Also there does not 
>>> seem to be any reason for it -- other 2-ary arithmetic operators like atan2 
>>> can be read directly so why not these?
>>>    --Jasper
>>> 
>>> 
>>> _______________________________________________
>>> Bug-prolog mailing list
>>> [email protected]
>>> https://lists.gnu.org/mailman/listinfo/bug-prolog
>>> 
>>> -- 
>>> Ce message a ete verifie par MailScanner
>>> pour des virus ou des polluriels et rien de
>>> suspect n'a ete trouve.
>>> 
>> 
>> 
>> -- 
>> Ce message a été vérifié par MailScanner pour des virus ou des polluriels et 
>> rien de suspect n'a été trouvé.
> 
> 
> -- 
> Ce message a été vérifié par MailScanner pour des virus ou des polluriels et 
> rien de suspect n'a été trouvé.
> _______________________________________________
> Bug-prolog mailing list
> [email protected]
> https://lists.gnu.org/mailman/listinfo/bug-prolog


-- 
Ce message a ete verifie par MailScanner
pour des virus ou des polluriels et rien de
suspect n'a ete trouve.

_______________________________________________
Bug-prolog mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/bug-prolog

Reply via email to