[Openmcl-devel] two portability issues
joswig at lisp.de
Sun Dec 21 01:34:21 UTC 2014
>>> ** second issue: LOOP clause MAXIMIZE**
>>> in above function there is a clause MAXIMIZE … FIXNUM .
>>> In CCL (and several other implementations, with the exception of LispWorks) this causes that a wrong result (a negative number) is computed. Without the FIXNUM declaration the result is correct.
>> Does it return the same result (perhaps more slowly) if the FIXNUM declaration is retained and the OPTIMIZE declaration is changed to something like (SAFETY 3) (SPEED 0) ?
> The problem seems to appear without optimize declarations...
> (defun get-longest-path (nodes node-id visited &aux (max 0))
> (setf (svref visited node-id) t)
> (setf max (loop for neighbour of-type route in (svref nodes node-id)
> unless (svref visited (route-dest neighbour))
> maximize (+ (the fixnum (route-cost neighbour))
> (the fixnum (get-longest-path nodes
> (route-dest neighbour)
> (setf (svref visited node-id) nil)
> Safety 3 and Speed 0 takes a long time and returns the wrong result: -1152921504606837995
> The expected result would have been 8981.
it works for real, but not fixnum… The computed numbers are not outside the fixnum range, though.
… maximize (…) real ) works
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Openmcl-devel