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

  • 相关阅读:
    acm的STL容器之vector篇
    服务器远程管理方法及centos该装那个
    VB获取对象成员
    获取搜索引擎关键字建议
    IntelliJ IDEA乱码 问题
    排序算法思想
    ubuntu16 开机启动plank
    fail-fast出识
    html 标签过滤、转译、反转译
    (a ==1 && a== 2 && a==3) 有可能是 true 吗?
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786053.html
Copyright © 2011-2022 走看看