summaryrefslogtreecommitdiff
path: root/closure/closure.scm
blob: 9dec47ec7634c0eda4df0406bd391ecfea4c721e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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))))