From: Robert D. <rob...@gm...> - 2014-08-18 16:54:05
|
On 2014-08-16, Edwin Woollett <woo...@ch...> wrote: > if is(equal(nstep,nprint)) then ( Change this line to if nstep = nprint then ( to avoid the bug. This is a good one. By good, I mean terrible. The bug is somewhere in the code for "equal" -- Maxima tries to compare two integers for equality and ends up in a apparently-endless loop of DLSF and DLS (deep in the bowels of src/compar.lisp) calling each other. I guess we should fix that. Here is a shorter version which triggers the bug: (%i1) for i thru 3000 do if equal (1, i) then print ("HEY"); HEY Maxima encountered a Lisp error: Error in PROGN [or a callee]: Bind stack overflow. That's with GCL. With SBCL, the loop limit has to be bigger; with 30000, it eventually barfs out "Binding stack exhausted". With Clisp, 3000 is OK; 30000 triggers a stack overflow. As a minor tangential issue, there's no need for is(...) in "if" since "if" effectively applies "is" itself. best Robert Dodier |