Skip to content

Instantly share code, notes, and snippets.

@bis83
Last active August 29, 2015 14:26
Show Gist options
  • Save bis83/c4aa6dad4b059f6347c3 to your computer and use it in GitHub Desktop.
Save bis83/c4aa6dad4b059f6347c3 to your computer and use it in GitHub Desktop.
simple-pandoric.scm
(define-syntax pandoric-let
(syntax-rules ()
((_ ((var val) ...) body ... retval)
(let ((this #f) (var val) ...)
(set! this retval)
body ...
(lambda args
(case (car args)
((__pandoric-set)
(case (cadr args)
((var) (set! var (caddr args))) ...))
((__pandoric-get)
(case (cadr args)
((var) var) ...))
(else
(apply this args))))))))
(define p-get
(cut <> '__pandoric-get <>))
(define p-set!
(cut <> '__pandoric-set <> <>))
(define pandtest
(pandoric-let ((acc 0))
(lambda (n)
(set! acc (+ n acc))
acc)))
(pandtest 1)
(pandtest 2)
(p-get pandtest 'acc)
(p-set! pandtest 'acc 0)
(pandtest 1)
(p-get pandtest 'acc)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment