summaryrefslogtreecommitdiff
path: root/closure/closure.scm
diff options
context:
space:
mode:
Diffstat (limited to 'closure/closure.scm')
-rw-r--r--closure/closure.scm32
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))))