; AR ::= (make-var symbol) | (make-const integer) | (make-proc var AR) | ; (make-app (AR AR) (define-struct var (symbol)) (define-struct const (number)) (define-struct proc (var body)) (define-struct app (rator rand)) ; Note type contracts on structures is given in definition of AR above ; template for processing AR (LC abstract representation/syntax) (define fAR (lambda (an-ar ...) ; an-ar is an ar (cond ((var? an-ar) ... (var-symbol an-ar) ...) ((const? an-ar) ... (const-number an-ar) ...) ((proc? an-ar) ... (fAR ... (proc-body an-ar)) ...) ((app? an-ar) ... (fAR ... (app-rator an-ar)) (fAR ... (app-rand an-ar)) ... )))) ; SDAR ::= (make-sdvar integer) | (make-num integer) | (make-sdproc SDAR) | ; (make-app AR AR) (define-struct sdvar (index)) (define-struct num (value)) (define-struct sdproc (body)) (define ar1 (make-app (make-proc (make-var x) (make-var x)) (make-const 1))) (define sdar1 (make-app (define sd ...)