Am Mittwoch, den 25.03.2009, 16:56 -0400 schrieb Raymond Toy:
> Dieter Kaiser wrote:
> > -----Urspr?ngliche Nachricht-----
> > Von: robert.dodier at gmail.com [mailto:robert.dodier at gmail.com]
> > Gesendet: Montag, 23. M?rz 2009 23:35
> >
> >
> >> I wonder if UNWIND-PROTECT is strong enough.
> >> I ran into a problem recently in which UNWIND-PROTECT
> >> failed to catch something, and so I had to put
> >> IGNORE-ERRORS instead.
> >>
> >
> > You are right, UNWIND-PROTECT is not strong enough. I get further the problem
> > with an increasing number of contexts.
> >
> Doesn't that sound like a bug in unwind-protect in the lisp
> implementation? You shouldn't be able to exit an unwind-protect without
> running the cleanup forms, I think.
Yes, this might be the case. I have tested UNWIND-PROTECT only with GCL
on Windows up to now. I have got problems with CLISP 2.44 on Windows,
but that's another point. I will test UNWIND-PROTECT later with CLISP on
Linux.
When I implement a function simplim%gamma_incomplete to handle specific
values for the gamma_incomplete function the problem for integrals which
involve gamma_incomplete vanish.
This is the call in simplimit:
((eq (caar exp) '%gamma_incomplete)
(simplim%gamma_incomplete (limit (second exp) var val 'think)
(limit (third exp) var val 'think)))
This is a simplim%function for gamma_incomplete. The definition is not
complete, but seems to work for the integrals which I have tested.
(defun simplim%gamma_incomplete (a z)
(cond ((or (zerop1 z)
(eq z '$zeroa)
(eq z '$zerob))
(let ((sgn ($sign ($realpart a))))
(cond ((member sgn '($neg $nz $zero)) '$infinity)
((eq sgn '($pos)) ($gamma a))
(t ($gamma_incomplete) a z))))
((eq z '$inf) 0)
(t ($gamma_incomplete a z))))
Dieter Kaiser