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"))))))))