Not holding state? pasted by anandamide on Wed Apr 13 22:52:00 2016
(define-syntax symbolic-accessor (syntax-rules () ([symbolic-accessor members ...] (let* (members ...) (call/cc (lambda (yield) (yield (lambda (p) (cond ([eq? p (car 'members)] (cadr 'members)) ... (else (error "input not found"))))))))))) ;usage ------- #1> (define ob (symbolic-accessor (a 10) (b 20) (c 30))) #2> (ob 'a) >>> 10 #3> (ob 'b) >>> 20 #4> (define ob (symbolic-accessor (a 10) (b 20) (c (lambda (x) (set! a x))))) #5>(ob 'a) >>>10 #6>((ob 'c) 20) >>> Error: call of non-procedure: (lambda (x) (set! a x)) Call history: <syntax> ((ob (quote c)) 20) <syntax> (ob (quote c)) <syntax> (quote c) <syntax> (##core#quote c) <eval> ((ob (quote c)) 20) <eval> (ob (quote c)) <eval> (eq?387 p385 (car388 (quote389 (a 10)))) <eval> (car388 (quote389 (a 10))) <eval> (eq?387 p385 (car388 (quote389 (c (lambda (x) (set! a x)))))) <eval> (car388 (quote389 (c (lambda (x) (set! a x))))) <eval> (cadr390 (quote389 (c (lambda (x) (set! a x))))) <--
Using pattern matching for fun and profit pasted by sjamaan on Wed Apr 13 22:58:54 2016
(define-syntax symbolic-accessor
(syntax-rules ()
((_ (?var0 ?val0) ...)
(let* ((?var0 ?val0) ...)
(call/cc (lambda (yield)
(yield (lambda (p)
(cond ((eq? p '?var0) ?val0)
...
(else (error "input not found")))))))))))
There, I fixed it for you pasted by sjamaan on Wed Apr 13 23:05:53 2016
(define-syntax symbolic-accessor
(syntax-rules ()
((_ (?var0 ?val0) ...)
(let* ((?var0 ?val0) ...)
(lambda (p)
(cond ((eq? p '?var0) ?val0)
...
(else (error "input not found"))))))))
For real this time added by sjamaan on Wed Apr 13 23:06:30 2016
(define-syntax symbolic-accessor
(syntax-rules ()
((_ (?var0 ?val0) ...)
(let* ((?var0 ?val0) ...)
(lambda (p)
(cond ((eq? p '?var0) ?var0)
...
(else (error "input not found"))))))))