(define Walk-exp ; an interpreter builder than takes procedures for each ; syntactic category as inputs ; all of these procedures take three arguments: ; the constructed interpreter, ; the expression to be interpreted (which must be of stated form), and ; the environment (lambda (null-proc bool-proc num-proc prim-proc id-proc uop-proc biop-proc map-proc app-proc let-proc if-proc) (rec proc (lambda (exp env) (cond [(null-exp? exp) (null-proc proc exp env)] [(bool-exp? exp) (bool-proc proc exp env)] [(num-exp? exp) (num-proc proc exp env)] [(prim-exp? exp) (prim-proc proc exp env)] [(id-exp? exp) (id-proc proc exp env)] [(uop-exp? exp) (uop-proc proc exp env)] [(biop-exp? exp) (biop-proc proc exp env)] [(map-exp? exp) (map-proc proc exp env)] [(app-exp? exp) (app-proc proc exp env)] [(let-exp? exp) (let-proc proc exp env)] [(if-exp? exp) (if-proc proc exp env)] [else (error 'Walk-exp "illegal expression: ~a" exp)])))))