diff options
Diffstat (limited to 'closure/closure.scm')
-rw-r--r-- | closure/closure.scm | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/closure/closure.scm b/closure/closure.scm new file mode 100644 index 0000000..9dec47e --- /dev/null +++ b/closure/closure.scm @@ -0,0 +1,32 @@ +(define-module (closure) + #:export (iterative-add + set-store + peek-store + advance-char)) + +(define (iterative-add) + "Given NUM, returns NUM plus the previous +supplied NUM." + (let ((prev-num 0)) + (lambda num + (let ((result + (+ (car num) prev-num))) + (set! prev-num (car num)) + result)))) + +(define set-store #f) +(define peek-char #f) +(define advance-char #f) + +(let ((store '())) + (set! set-store + (lambda (lst) + (set! store lst))) + (set! peek-char + (lambda () + (car store))) + (set! advance-char + (lambda () + (let ((ret (car store))) + (set! store (cdr store)) + ret)))) |