Looks like I introduced a bug in the REPL window code in my last release, passing incomplete multiline expressions to Gambit native code in some cases. I have a fix and will try to put it up on Android Market probably tomorrow. Thanks for finding it.

In the meantime, you should be able to evaluate your definition as a "script" or via telnet into the REPL server, or enter your definition all on one line and evaluate in the REPL window.

"Sharing" contents of the REPL window using an email app can cause Android OS to kill Gambit to free memory, but should restart ok. Try "sharing" a single line version of your expression and see if you have the same problem.

Regards,

Keith

On Sep 14, 2011, at 8:02 PM, Steve Graham wrote:

I've been studying "A Tour of Scheme in Gambit" and using Android Gambit (AG) to go through some of the exercises.  I came across the following interesting lesson and decided to try it.  And after I entered it into AG, the system did not come back from the repl.

Gambit v4.6.1
>  (define (counter)
        (let ((value 0))
              (lambda ()
                  (set! value (+ value 1))
                  value)))

I tried sending it via the Share functionality to a different e-mail address than my Google address and it did not deliver it, although I could see it in the Gmail Sent folder.  I then tried sending it to the Gmail address and that did work fine.

I noticed each time after sharing and then returning to the repl, there was a new prompt; however, I could not get the system to respond.  The only thing that worked was killing the AG task and restarting AG.

On a final note, I am mystified as to how the code works.  This is an example of it being defined and run on my Windows 7x64 machine:

Gambit v4.6.1

> (define (counter)
        (let ((value 0))
              (lambda ()
                  (set! value (+ value 1))
                  value)))
> (define first-counter (counter))
> (first-counter)
1
> (first-counter)
2
> (first-counter)
3
> (first-counter)
4
>

 It seems to initialize value to 0 and I assume that happens the first time you use (counter) to define another form.  What I don't understand is why the code for initializing is skipped every time (first-counter) is run.

TIA, Steve






_______________________________________________
Gambit-list mailing list
Gambit-list@iro.umontreal.ca
https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list