#lang racket ;;; assignment (define (analyze-assignment expr) (let ([var (assignment-var expr)] [vproc (analyze (assignment-value expr))]) (lambda (env succeed fail) (vproc env (lambda (val fail2) (let ([old-val (lookup-variable-value var env)]) (set-variable-value! var val) (succeed 'ok (lambda () (set-variable-value! var old-val env) (fail2))))) fail)))) ;; permenent-set! ;;; assignment (define (analyze-permanent-assignment expr) (let ([var (perm-assignment-var expr)] [vproc (analyze (perm-assignment-value expr))]) (lambda (env succeed fail) (vproc env (lambda (val fail2) (set-variable-value! var val) (succeed 'ok fail2)) fail))))