Re: Problem with SBCL pprint

Robert Goldman <[email protected]> Fri, 27 Mar 2026 17:59:27 -0500
Newsgroups gmane.lisp.steel-bank.general
Message-ID <[email protected]>
--===============8350754232106741611==
Content-Type: multipart/alternative;
 boundary="=_MailMate_185A2642-D07B-4454-A6E9-E58D2C4D42F2_="
Content-Transfer-Encoding: 8bit


--=_MailMate_185A2642-D07B-4454-A6E9-E58D2C4D42F2_=
Content-Type: text/plain; charset=UTF-8; format=flowed; markup=markdown
Content-Transfer-Encoding: 8bit

I see -- right.  I forgot that there was a cost expression in there.

And ... my machine crashed and I lost the fixed version of the file.  So 
yes, that *did* fix it.  Thank you and sorry for the confusion!

```
commit 1fe64581ab1f330279edb223193b381b89e3f8d4 (HEAD -> 
binding-stack-issue)
Author: Robert P. Goldman <[email protected]>
Date:   Fri Mar 27 17:57:30 2026 -0500

     Stas Bokuraev fixed stack overflow problem on SBCL.

     Setting the pprint-dispatch-table entry for `integer` caused SBCL 
to
     go into infinite recursion printing an integer.  Removing this 
entry
     on SBCL fixed it.
```

On 27 Mar 2026, at 17:44, Stas Boukarev wrote:

> 1 is an integer, last time I checked.
>
> On Sat, Mar 28, 2026 at 1:43 AM Robert Goldman <[email protected]> 
> wrote:
>>
>> I'm not sure I understand. Why is it that you think printing integers 
>> is the problem here?
>>
>> It may be the case that setting the pprint dispatch table for 
>> integers could cause a problem, but the file of test data causing 
>> this error has no integers in it. So I'm not sure why you think that 
>> the pprint dispatch entry for integers would fix the problem. The 
>> file read is a file in PDDL (the input language of the international 
>> planning competition). Here, with no nice formatting is that file. 
>> Using the special pretty-print table to display it nicely is what 
>> causes the error.
>>
>> (SIFT-PDDL:DEFINE (SIFT-PDDL:DOMAIN 
>> SIFT-PDDL::OPENSTACKS-SEQUENCEDSTRIPS-ADL) (:REQUIREMENTS :TYPING 
>> :ADL :ACTION-COSTS) (:TYPES SIFT-PDDL::ORDER SIFT-PDDL::PRODUCT 
>> SIFT-PDDL::COUNT) (:CONSTANTS SIFT-PDDL::O4 - SIFT-PDDL::ORDER 
>> SIFT-PDDL::P4 - SIFT-PDDL::PRODUCT) (:PREDICATES (SIFT-PDDL::INCLUDES 
>> SIFT-PDDL::?O - SIFT-PDDL::ORDER SIFT-PDDL::?P - SIFT-PDDL::PRODUCT) 
>> (SIFT-PDDL::WAITING SIFT-PDDL::?O - SIFT-PDDL::ORDER) 
>> (SIFT-PDDL::STARTED SIFT-PDDL::?O - SIFT-PDDL::ORDER) 
>> (SIFT-PDDL::SHIPPED SIFT-PDDL::?O - SIFT-PDDL::ORDER) 
>> (SIFT-PDDL::MADE SIFT-PDDL::?P - SIFT-PDDL::PRODUCT) 
>> (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?S - SIFT-PDDL::COUNT) 
>> (SIFT-PDDL::NEXT-COUNT SIFT-PDDL::?S SIFT-PDDL::?NS - 
>> SIFT-PDDL::COUNT)) (:FUNCTIONS (SIFT-PDDL::TOTAL-COST) - NUMBER) 
>> (:ACTION SIFT-PDDL::MAKE-PRODUCT :PARAMETERS (SIFT-PDDL::?P - 
>> SIFT-PDDL::PRODUCT) :PRECONDITION (AND (NOT (SIFT-PDDL::MADE 
>> SIFT-PDDL::?P)) (SIFT-PDDL:FORALL (SIFT-PDDL::?O - SIFT-PDDL::ORDER) 
>> (SIFT-PDDL:IMPLY (SIFT-PDDL::INCLUDES SIFT-PDDL::?O SIFT-PDDL::?P) 
>> (SIFT-PDDL::STARTED SIFT-PDDL::?O)))) :EFFECT (SIFT-PDDL::MADE 
>> SIFT-PDDL::?P)) (:ACTION SIFT-PDDL::START-ORDER :PARAMETERS 
>> (SIFT-PDDL::?O - SIFT-PDDL::ORDER SIFT-PDDL::?AVAIL 
>> SIFT-PDDL::?NEW-AVAIL - SIFT-PDDL::COUNT) :PRECONDITION (AND 
>> (SIFT-PDDL::WAITING SIFT-PDDL::?O) (SIFT-PDDL::STACKS-AVAIL 
>> SIFT-PDDL::?AVAIL) (SIFT-PDDL::NEXT-COUNT SIFT-PDDL::?NEW-AVAIL 
>> SIFT-PDDL::?AVAIL)) :EFFECT (AND (NOT (SIFT-PDDL::WAITING 
>> SIFT-PDDL::?O)) (SIFT-PDDL::STARTED SIFT-PDDL::?O) (NOT 
>> (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?AVAIL)) (SIFT-PDDL::STACKS-AVAIL 
>> SIFT-PDDL::?NEW-AVAIL))) (:ACTION SIFT-PDDL::SHIP-ORDER :PARAMETERS 
>> (SIFT-PDDL::?O - SIFT-PDDL::ORDER SIFT-PDDL::?AVAIL 
>> SIFT-PDDL::?NEW-AVAIL - SIFT-PDDL::COUNT) :PRECONDITION (AND 
>> (SIFT-PDDL::STARTED SIFT-PDDL::?O) (SIFT-PDDL:FORALL (SIFT-PDDL::?P - 
>> SIFT-PDDL::PRODUCT) (SIFT-PDDL:IMPLY (SIFT-PDDL::INCLUDES 
>> SIFT-PDDL::?O SIFT-PDDL::?P) (SIFT-PDDL::MADE SIFT-PDDL::?P))) 
>> (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?AVAIL) (SIFT-PDDL::NEXT-COUNT 
>> SIFT-PDDL::?AVAIL SIFT-PDDL::?NEW-AVAIL)) :EFFECT (AND (NOT 
>> (SIFT-PDDL::STARTED SIFT-PDDL::?O)) (SIFT-PDDL::SHIPPED 
>> SIFT-PDDL::?O) (NOT (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?AVAIL)) 
>> (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?NEW-AVAIL))) (:ACTION 
>> SIFT-PDDL::OPEN-NEW-STACK :PARAMETERS (SIFT-PDDL::?OPEN 
>> SIFT-PDDL::?NEW-OPEN - SIFT-PDDL::COUNT) :PRECONDITION (AND 
>> (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?OPEN) (SIFT-PDDL::NEXT-COUNT 
>> SIFT-PDDL::?OPEN SIFT-PDDL::?NEW-OPEN)) :EFFECT (AND (NOT 
>> (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?OPEN)) (SIFT-PDDL::STACKS-AVAIL 
>> SIFT-PDDL::?NEW-OPEN) (SIFT-PDDL:INCREASE (SIFT-PDDL::TOTAL-COST) 
>> 1))) (:ACTION SIFT-PDDL::DIVERGENCE :PARAMETERS NIL :PRECONDITION NIL 
>> :EFFECT (AND (SIFT-PDDL::WAITING SIFT-PDDL::O4) (NOT (SIFT-PDDL::MADE 
>> SIFT-PDDL::P4)) (NOT (SIFT-PDDL::STARTED SIFT-PDDL::O4)))))
>>
>> In this dialect of PDDL there are, in fact, no integers (the integers 
>> in the above are all parts of symbols, such as O4).
>>
>> On 27 Mar 2026, at 17:20, Stas Boukarev wrote:
>>
>> I had no errors when using:
>> (lambda (str obj)
>> (let ((print-pprint-dispatch (copy-pprint-dispatch nil)))
>> (format str "~d" obj)))
>>
>> And I can't speak to allegro or clozure.
>>
>> On Sat, Mar 28, 2026 at 1:17 AM Robert Goldman [email protected] 
>> wrote:
>>
>> On 27 Mar 2026, at 15:55, Stas Boukarev wrote:
>>
>> You have
>> (set-pprint-dispatch 'integer
>> #'(lambda (str obj)
>> (format str "~d" obj))
>> 0 pddl-pprint-dispatch)
>>
>> Which results in endless recursion.
>>
>> I just retried the test with the set-pprint-dispatch calls for 
>> integer and float preceded by #-sbcl, but I am getting the same 
>> failure as before (possibly from a different cause).
>>
>> Thank you very much, Stas! Do you have any clue why this infinite 
>> recursion would be happening only in SBCL?
>>
>> On Fri, Mar 27, 2026 at 11:32 PM Robert Goldman [email protected] 
>> wrote:
>>
>> Still working on my error. I have found a minimum case, and it's 
>> available here:
>>
>> https://github.com/rpgoldman/pddl-tools/pull/24
>>
>> This merge request gives instructions for replication. In summary, 
>> it's just sbcl --load "do-test.lisp"
>>
>> There's a relatively small file that is read and then pprinted. This 
>> causes a stack overflow on SBCL. On Allegro, it prints fine. There 
>> appears to be some sort of spurious proliferation of stack frames, 
>> which may indicate an actual bug in SBCL (or there's something 
>> standards-variant that Allegro and CCL do differently).
>>
>> I would never bet on my having found a bug in SBCL versus making some 
>> obscure mistake, though!
>>
>> ________________________________
>>
>> Sbcl-help mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/sbcl-help

--=_MailMate_185A2642-D07B-4454-A6E9-E58D2C4D42F2_=
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html>
<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/xhtml; charset=3Dutf-8"=
>
</head>
<body><div style=3D"font-family: sans-serif;"><div class=3D"markdown" sty=
le=3D"white-space: normal;">
<p dir=3D"auto">I see -- right.  I forgot that there was a cost expressio=
n in there.</p>
<p dir=3D"auto">And ... my machine crashed and I lost the fixed version o=
f the file.  So yes, that <em>did</em> fix it.  Thank you and sorry for t=
he confusion!</p>
<pre style=3D"margin-left: 15px; margin-right: 15px; padding: 5px; backgr=
ound-color: #F7F7F7; border-radius: 5px 5px 5px 5px; overflow-x: auto; ma=
x-width: 90vw;"><code style=3D"margin: 0 0; border-radius: 3px; backgroun=
d-color: #F7F7F7; padding: 0px;">commit 1fe64581ab1f330279edb223193b381b8=
9e3f8d4 (HEAD -&gt; binding-stack-issue)
Author: Robert P. Goldman &lt;[email protected]&gt;
Date:   Fri Mar 27 17:57:30 2026 -0500

    Stas Bokuraev fixed stack overflow problem on SBCL.

    Setting the pprint-dispatch-table entry for `integer` caused SBCL to
    go into infinite recursion printing an integer.  Removing this entry
    on SBCL fixed it.
</code></pre>
<p dir=3D"auto">On 27 Mar 2026, at 17:44, Stas Boukarev wrote:</p>
<blockquote style=3D"margin: 0 0 5px; padding-left: 5px; border-left: 2px=
 solid #777777; color: #777777;">
<p dir=3D"auto">1 is an integer, last time I checked.</p>
<p dir=3D"auto">On Sat, Mar 28, 2026 at 1:43=E2=80=AFAM Robert Goldman <a=
 href=3D"mailto:[email protected]" style=3D"color: #777777;">rpgoldman@=
sift.info</a> wrote:</p>
<blockquote style=3D"margin: 0 0 5px; padding-left: 5px; border-left: 2px=
 solid #777777; border-left-color: #999999; color: #999999;">
<p dir=3D"auto">I'm not sure I understand. Why is it that you think print=
ing integers is the problem here?</p>
<p dir=3D"auto">It may be the case that setting the pprint dispatch table=
 for integers could cause a problem, but the file of test data causing th=
is error has no integers in it. So I'm not sure why you think that the pp=
rint dispatch entry for integers would fix the problem. The file read is =
a file in PDDL (the input language of the international planning competit=
ion). Here, with no nice formatting is that file. Using the special prett=
y-print table to display it nicely is what causes the error.</p>
<p dir=3D"auto">(SIFT-PDDL:DEFINE (SIFT-PDDL:DOMAIN SIFT-PDDL::OPENSTACKS=
-SEQUENCEDSTRIPS-ADL) (:REQUIREMENTS :TYPING :ADL :ACTION-COSTS) (:TYPES =
SIFT-PDDL::ORDER SIFT-PDDL::PRODUCT SIFT-PDDL::COUNT) (:CONSTANTS SIFT-PD=
DL::O4 - SIFT-PDDL::ORDER SIFT-PDDL::P4 - SIFT-PDDL::PRODUCT) (:PREDICATE=
S (SIFT-PDDL::INCLUDES SIFT-PDDL::?O - SIFT-PDDL::ORDER SIFT-PDDL::?P - S=
IFT-PDDL::PRODUCT) (SIFT-PDDL::WAITING SIFT-PDDL::?O - SIFT-PDDL::ORDER) =
(SIFT-PDDL::STARTED SIFT-PDDL::?O - SIFT-PDDL::ORDER) (SIFT-PDDL::SHIPPED=
 SIFT-PDDL::?O - SIFT-PDDL::ORDER) (SIFT-PDDL::MADE SIFT-PDDL::?P - SIFT-=
PDDL::PRODUCT) (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?S - SIFT-PDDL::COUNT)=
 (SIFT-PDDL::NEXT-COUNT SIFT-PDDL::?S SIFT-PDDL::?NS - SIFT-PDDL::COUNT))=
 (:FUNCTIONS (SIFT-PDDL::TOTAL-COST) - NUMBER) (:ACTION SIFT-PDDL::MAKE-P=
RODUCT :PARAMETERS (SIFT-PDDL::?P - SIFT-PDDL::PRODUCT) :PRECONDITION (AN=
D (NOT (SIFT-PDDL::MADE SIFT-PDDL::?P)) (SIFT-PDDL:FORALL (SIFT-PDDL::?O =
- SIFT-PDDL::ORDER) (SIFT-PDDL:IMPLY (SIFT-PDDL::INCLUDES SIFT-PDDL::?O S=
IFT-PDDL::?P) (SIFT-PDDL::STARTED SIFT-PDDL::?O)))) :EFFECT (SIFT-PDDL::M=
ADE SIFT-PDDL::?P)) (:ACTION SIFT-PDDL::START-ORDER :PARAMETERS (SIFT-PDD=
L::?O - SIFT-PDDL::ORDER SIFT-PDDL::?AVAIL SIFT-PDDL::?NEW-AVAIL - SIFT-P=
DDL::COUNT) :PRECONDITION (AND (SIFT-PDDL::WAITING SIFT-PDDL::?O) (SIFT-P=
DDL::STACKS-AVAIL SIFT-PDDL::?AVAIL) (SIFT-PDDL::NEXT-COUNT SIFT-PDDL::?N=
EW-AVAIL SIFT-PDDL::?AVAIL)) :EFFECT (AND (NOT (SIFT-PDDL::WAITING SIFT-P=
DDL::?O)) (SIFT-PDDL::STARTED SIFT-PDDL::?O) (NOT (SIFT-PDDL::STACKS-AVAI=
L SIFT-PDDL::?AVAIL)) (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?NEW-AVAIL))) (=
:ACTION SIFT-PDDL::SHIP-ORDER :PARAMETERS (SIFT-PDDL::?O - SIFT-PDDL::ORD=
ER SIFT-PDDL::?AVAIL SIFT-PDDL::?NEW-AVAIL - SIFT-PDDL::COUNT) :PRECONDIT=
ION (AND (SIFT-PDDL::STARTED SIFT-PDDL::?O) (SIFT-PDDL:FORALL (SIFT-PDDL:=
:?P - SIFT-PDDL::PRODUCT) (SIFT-PDDL:IMPLY (SIFT-PDDL::INCLUDES SIFT-PDDL=
::?O SIFT-PDDL::?P) (SIFT-PDDL::MADE SIFT-PDDL::?P))) (SIFT-PDDL::STACKS-=
AVAIL SIFT-PDDL::?AVAIL) (SIFT-PDDL::NEXT-COUNT SIFT-PDDL::?AVAIL SIFT-PD=
DL::?NEW-AVAIL)) :EFFECT (AND (NOT (SIFT-PDDL::STARTED SIFT-PDDL::?O)) (S=
IFT-PDDL::SHIPPED SIFT-PDDL::?O) (NOT (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL:=
:?AVAIL)) (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?NEW-AVAIL))) (:ACTION SIFT=
-PDDL::OPEN-NEW-STACK :PARAMETERS (SIFT-PDDL::?OPEN SIFT-PDDL::?NEW-OPEN =
- SIFT-PDDL::COUNT) :PRECONDITION (AND (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL=
::?OPEN) (SIFT-PDDL::NEXT-COUNT SIFT-PDDL::?OPEN SIFT-PDDL::?NEW-OPEN)) :=
EFFECT (AND (NOT (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?OPEN)) (SIFT-PDDL::=
STACKS-AVAIL SIFT-PDDL::?NEW-OPEN) (SIFT-PDDL:INCREASE (SIFT-PDDL::TOTAL-=
COST) 1))) (:ACTION SIFT-PDDL::DIVERGENCE :PARAMETERS NIL :PRECONDITION N=
IL :EFFECT (AND (SIFT-PDDL::WAITING SIFT-PDDL::O4) (NOT (SIFT-PDDL::MADE =
SIFT-PDDL::P4)) (NOT (SIFT-PDDL::STARTED SIFT-PDDL::O4)))))</p>
<p dir=3D"auto">In this dialect of PDDL there are, in fact, no integers (=
the integers in the above are all parts of symbols, such as O4).</p>
<p dir=3D"auto">On 27 Mar 2026, at 17:20, Stas Boukarev wrote:</p>
<p dir=3D"auto">I had no errors when using:<br>
(lambda (str obj)<br>
(let ((print-pprint-dispatch (copy-pprint-dispatch nil)))<br>
(format str &quot;~d&quot; obj)))</p>
<p dir=3D"auto">And I can't speak to allegro or clozure.</p>
<p dir=3D"auto">On Sat, Mar 28, 2026 at 1:17=E2=80=AFAM Robert Goldman <a=
 href=3D"mailto:[email protected]" style=3D"color: #999999;">rpgoldman@=
sift.info</a> wrote:</p>
<p dir=3D"auto">On 27 Mar 2026, at 15:55, Stas Boukarev wrote:</p>
<p dir=3D"auto">You have<br>
(set-pprint-dispatch 'integer<br>
#'(lambda (str obj)<br>
(format str &quot;~d&quot; obj))<br>
0 pddl-pprint-dispatch)</p>
<p dir=3D"auto">Which results in endless recursion.</p>
<p dir=3D"auto">I just retried the test with the set-pprint-dispatch call=
s for integer and float preceded by #-sbcl, but I am getting the same fai=
lure as before (possibly from a different cause).</p>
<p dir=3D"auto">Thank you very much, Stas! Do you have any clue why this =
infinite recursion would be happening only in SBCL?</p>
<p dir=3D"auto">On Fri, Mar 27, 2026 at 11:32=E2=80=AFPM Robert Goldman <=
a href=3D"mailto:[email protected]" style=3D"color: #999999;">rpgoldman=
@sift.info</a> wrote:</p>
<p dir=3D"auto">Still working on my error. I have found a minimum case, a=
nd it's available here:</p>
<p dir=3D"auto"><a href=3D"https://github.com/rpgoldman/pddl-tools/pull/2=
4" style=3D"color: #999999;">https://github.com/rpgoldman/pddl-tools/pull=
/24</a></p>
<p dir=3D"auto">This merge request gives instructions for replication. In=
 summary, it's just sbcl --load &quot;do-test.lisp&quot;</p>
<p dir=3D"auto">There's a relatively small file that is read and then ppr=
inted. This causes a stack overflow on SBCL. On Allegro, it prints fine. =
There appears to be some sort of spurious proliferation of stack frames, =
which may indicate an actual bug in SBCL (or there's something standards-=
variant that Allegro and CCL do differently).</p>
<p dir=3D"auto">I would never bet on my having found a bug in SBCL versus=
 making some obscure mistake, though!</p>
<hr style=3D"border: 0; height: 1px; background: #333; background-image: =
linear-gradient(to right, #ccc, #333, #ccc);">
<p dir=3D"auto">Sbcl-help mailing list<br>
<a href=3D"mailto:[email protected]" style=3D"color: #99999=
9;">[email protected]</a><br>
<a href=3D"https://lists.sourceforge.net/lists/listinfo/sbcl-help" style=3D=
"color: #999999;">https://lists.sourceforge.net/lists/listinfo/sbcl-help<=
/a></p>
</blockquote>
</blockquote>

</div>
</div>
</body>

</html>

--=_MailMate_185A2642-D07B-4454-A6E9-E58D2C4D42F2_=--


--===============8350754232106741611==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--===============8350754232106741611==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Sbcl-help mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sbcl-help

--===============8350754232106741611==--