I'm using Guile 2.2.7, under Ubuntu 20.04.

--
Dave

On 10/3/20 2:15 AM, Aleix Conchillo Flaqué wrote:

Hi Dave,

On Mon, Sep 28, 2020 at 10:06 AM Dave Musicant <[email protected] <mailto:[email protected]>> wrote:

    Hi all,

    I'm seeing some strange behavior with tracing code, which I'd love
    some
    help understanding. I've boiled it down to the following
    simplified example:

    (define count
       (lambda (n)
         (if (equal? n 1) 1
             (+ 1 (count (- n 1))))))

    ,tr (count 92)


    When I run the above code (in a fresh Guile instance, via redirecting
    from a file), the trace runs to completion.

    However, when I run this version of the code from a file, which
    runs the
    function twice...

    (define count
       (lambda (n)
         (if (equal? n 1) 1
             (+ 1 (count (- n 1))))))

    ,tr (count 10)   ; runs to completion
    ,tr (count 92)   ; dies mid-trace


    ... then the trace dies when it runs the second time, in something
    that
    must be some sort of stack overflow, though the error is fairly
    cryptic:

    While executing meta-command:
    In procedure +: Wrong type argument in position 1: #<unspecified>

    What's happening from a memory perspective where tracing the code the
    first time affects how much memory is available for the second
    time? It
    seems that the first run shouldn't affect the stack limit of the
    second,
    but something is going on.

    Thanks for the help.
    Dave


I've tried it with Guile 3.0.4 (in macOS) and I didn't get this error. What version of Guile and OS are you using?

Aleix


Reply via email to