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
