Hi all,

please note that since yesterday picoLisp-2.3.4 is out.

The release contains a number of bug fixes, most notably in 'pipe' (as
discovered and discussed here), and in the 'http' and 'form' libraries.

The bignum routines contained a bug which obviously had been there
during all the years, but was rather improbable to show up. It could
lead to wrong results (or even to an infinite loop) if a large number
was compared to its negated and then absoluted value, e.g.

   : (let N 12345678901234567890 (> N (abs (- N))))
   -> T  # wrong!

It appeared only if the internal data structure of numbers (here 'N')
was shared. It did not appear in

   : (> 12345678901234567890 (abs (- 12345678901234567890)))
   -> NIL

The reason was that the unary minus and the 'abs' function duplicate the
first cell of a big number, so that the tails of the original 'N' and
the results of '-' and 'abs' are shared. This could not be handled by
the comparison routines.

I discovered this bug in the course of re-writing these routines in
assembly for picolisp-3.

'eval' and 'run' now accept a new optional argument that may hold a list
of symbols to be excluded from the unbinding process.

- Alex
UNSUBSCRIBE: mailto:picol...@software-lab.de?subject=unsubscribe

Reply via email to