The simplest case found by Richard Fateman is :
integrate(r(x)*sqrt(r(x)^2+5)/(r(x)^2+9),r(x));
Comment from Robert Dodier :
Looking at TRYRISCH1, I see that it peels off the last item on VARLIST (global list of variables) and then tries something. The stack overflow occurs because VARLIST gets peeled down to NIL but TRYRISCH1 keeps trying.
TRYRISCH1 is called from several places, and only one of them (TRYRISCH) verifies that VARLIST is nonnull before calling TRYRISCH1. Either TRYRISCH1 has to be modified to give up if VARLIST is null, or every caller needs to check VARLIST before calling TRYRISCH1.
I tried returning NIL from TRYRISCH1 if VARLIST is null, but that runs into a different error -- 0 is not a list or something. I wonder what is a suitable "I don't know" result for TRYRISCH1.
from Robert Dodier : I tried fixing up TRYRISCH1 to return ((0 . 1)) when VARLIST is null, but I get "0 is not of type LIST".
Last edit: laurent 2023-08-31
in current git:
compare with a simple variable:
Fixed by commit [b2ebd8].
integrateandrischnow replace non-atomic variables of integration with a gensym, while previouslyintegratedid that only for subscripted variables (and not ther(x)here in this case) andrischdidn't replace anything, but didn't work well with non-atomic variables.Related
Commit: [b2ebd8]