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