【SICP练习】147 练习4.3
练习4-3
原文
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.) .
分析
参照练习2.73即可。
(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))))
感谢您的访问,希望对您有所帮助。
欢迎大家关注或收藏、评论或点赞。
为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp
版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。