• 【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柯于旺 原创文章,如需转载请联系本人。

  • 相关阅读:
    在排序数组中查找元素
    搜索旋转排序数组
    下一个排列
    括号生成(回溯法)
    PHP之表单
    PHP之超级全局变量
    PHP之数组
    PHP之字符串
    PHP之常量
    PHP之echo/print
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786053.html
Copyright © 2020-2023  润新知