>>>>> "M" == M Luedde <[EMAIL PROTECTED]> writes:
    M> Hello!
    M> The guile-tutorial provides an example calculating the factorial of
    M> 500.

    M> The non-tail-recursive version from the tutorial yields a stack
    M> overflow on my system. A tail-recursive implementation works.

Many thanks for the report.  However, this is broadly a feature, not a
bug.  Unless you think that Guile should have an unlimited stack size,
a non-tail-recursive factorial will always overflow the stack for a
big enough number.

You can examine and increase Guile's stack limit like this:

guile> (debug-options 'full)
show-file-name  #t      Show file names and line numbers in backtraces when not `#f'.  
A value of `base' displays only base names, while `#t' displays full names.
stack           20000   Stack size limit (measured in words; 0 = no check).
debug           yes     Use the debugging evaluator.
backtrace       yes     Show backtrace on error.
depth           20      Maximal length of printed backtrace.
maxdepth        1000    Maximal number of stored backtrace frames.
frames          3       Maximum number of tail-recursive frames in backtrace.
indent          10      Maximal indentation in backtrace.
width           79      Maximal width of backtrace.
backwards       no      Display backtrace in anti-chronological order.
procnames       yes     Record procedure names at definition.
trace           no      *Trace mode.
breakpoints     no      *Check for breakpoints.
cheap           yes     *Flyweight representation of the stack at traps.
guile> (debug-set! stack 200000)
(show-file-name #t stack 200000 debug backtrace depth 20 maxdepth 1000 frames 3 indent 
10 width 79 procnames cheap)
guile> (fac 500)
12201368259911100687012387854230469262535743428031928421924135883858453731538819976054964475022032818630136164771482035841633787220781772004807852051593292854779075719393306037729608590862704291745478824249127263443056701732707694610628023104526442188787894657547771498634943677810376442740338273653974713864778784954384895955375379904232410612713269843277457155463099772027810145610811883737095310163563244329870295638966289116589747695720879269288712817800702651745077684107196243903943225364226052349458501299185715012487069615681416253590566934238130088562492468915641267756544818865065938479517753608940057452389403357984763639449053130623237490664450488246650759467358620746379251842004593696929810222639719525971909452178233317569345815085523328207628200234026269078983424517120062077146409794561161276291459512372299133401695523638509428855920187274337951730145863575708283557801587354327688886801203998823847021514676054454076635359841744304801289383138968816394874696588175045069!
26365338175055478128640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
guile> 

Is this OK, or do you think the documentation needs improving
somewhere?  (If you do, it would be most helpful if you could suggest
a patch ...)

        Neil


_______________________________________________
Bug-guile mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-guile

Reply via email to