fork download
  1. ; a scheme idiom
  2.  
  3. (define (make-setter x)
  4. (case-lambda
  5. (() x)
  6. ((y) (set! x y) x)))
  7.  
  8. (define x (make-setter #f))
  9. (display (x)) (newline)
  10. (display (x "hello")) (newline)
  11. (display (x)) (newline) (newline)
  12.  
  13. (define (make-accumulator n)
  14. (case-lambda
  15. (() n)
  16. ((m) (set! n (+ n m)) n)))
  17.  
  18. (define n (make-accumulator 10))
  19. (display (n)) (newline)
  20. (display (n 20)) (newline)
  21. (display (n)) (newline) (newline)
  22.  
  23. (define (make-vector-setter vec)
  24. (case-lambda
  25. ((idx) (vector-ref vec idx))
  26. ((idx val) (vector-set! vec idx val) vec)))
  27.  
  28. (define v (make-vector-setter (make-vector 3 #f)))
  29. (display (v 0 "hello")) (newline)
  30. (display (v 1 "goodbye")) (newline)
  31. (display (v 2 "Scheme is fun!")) (newline)
  32. (display (v 2)) (newline)
  33. (display (v 0)) (newline)
  34. (display (v 1)) (newline)
Success #stdin #stdout 0.01s 42848KB
stdin
Standard input is empty
stdout
#f
hello
hello

10
30
30

#(hello #f #f)
#(hello goodbye #f)
#(hello goodbye Scheme is fun!)
Scheme is fun!
hello
goodbye