本文共 1276 字,大约阅读时间需要 4 分钟。
Exercise 4.3. Rewrite eval so that the dispatch is done in data-directed style. Compare this with the datadirected differentiation procedure of exercise 2.73. (You may use the car of a compound expression as the type of the expression, as is appropriate for the syntax implemented in this section.) .
参照即可。
(define operation-table make-table) (define get (operation-table 'lookup-proc)) (define put (operation-table 'insert-proc)) (put 'op 'quote text-of-quotation) (put 'op 'set! eval-assignment) (put 'op 'define eval-definition) (put 'op 'if eval-if) (put 'op 'lambda (lambda (x y) (make-procedure (lambda-parameters x) (lambda-body x) y))) (put 'op 'begin (lambda (x y) (eval-sequence (begin-sequence x) y))) (put 'op 'cond (lambda (x y) (evaln (cond->if x) y))) (define (evaln expr env) (cond ((self-evaluating? expr) expr) ((variable? expr) (lookup-variable-value expr env)) ((get 'op (car expr)) (applyn (get 'op (car expr) expr env))) ((application? expr) (applyn (evaln (operator expr) env) (list-of-values (operands expr) env))) (else (error "Unkown expression type -- EVAL" expr))))
感谢您的访问,希望对您有所帮助。
欢迎大家关注或收藏、评论或点赞。
为使本文得到斧正和提问,转载请注明出处: