博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SICP练习】147 练习4.3
阅读量:5874 次
发布时间:2019-06-19

本文共 1276 字,大约阅读时间需要 4 分钟。

练习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.) .

分析

参照即可。

(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))))



感谢您的访问,希望对您有所帮助。

欢迎大家关注或收藏、评论或点赞。


为使本文得到斧正和提问,转载请注明出处:


你可能感兴趣的文章
Shell Script 学习一
查看>>
O036、Snapshot Instance 操作详解
查看>>
Auto 和 Decltye 的区别
查看>>
常用sql语句
查看>>
submit与button区别提交区别
查看>>
远程推送,集成极光的SDK,证书制造
查看>>
LeetCode-114. Flatten Binary Tree to Linked List
查看>>
Zedboard安装桌面系统ubuntu及opencv(2)
查看>>
函数声明优先级高于变量赋值
查看>>
20151217jqueryUI--自动补全工具
查看>>
链接脚本与重定位
查看>>
Hibernate 框架基本知识
查看>>
keystone nova v2 python
查看>>
VMware虚拟机Bridged(桥接模式)
查看>>
hdu4747 线段树区间修改值,区间查询和及最大值即最大值位置
查看>>
Python 字符串、列表、字典 操作方法大全 & 正则re
查看>>
Vue.js 介绍及其脚手架工具搭建
查看>>
Register code
查看>>
oracle基础入门(二)
查看>>
java 基础知识-数组的7种算法(排序、求和、最值、遍历...)
查看>>