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