SICP ex2-45
来源:互联网 发布:软件开发流程图软件 编辑:程序博客网 时间:2024/05/01 02:17
终于有习题了,但是这次的primitive put 和 get 会报错,代码无法测试,所以不给出代码
2.45要求将之前的求导函数利用添加type的方式进行选择 type 则根据运算符来加
问题为什么不把constant以及same-variable一并放到data-directed的程序中
首先我们比较constant以及same-variable 发现一个需要两个参数,一个需要一个参数,而我们利用data-directed进行过程选取,最后的过程需形式保持一致
故而,我们不将constant放入其中,那么我们再来考虑same-variable 由于选取需要时间,而该函数的使用次数较多,故而我们将其不放入其中以提高程序运行效率
另外same-variable缺少操作符,我们无法进行operator操作
第二问,要求写出sums 和products
首先我们将建立一张table 然后我们根据运算符号获取程序,然后将之前的product?的程序放入该程序中即可 sum类似
第三问过程作为table 类似第二问
第四问将 (get (operator exp) 'derive) 参数交换,我们发现2列的table 变为2行的table
2.46
一个应用问题,问题是不同分部采用数据结构不同,所以无法利用相同的过程进行信息获取
我们采用data-directed的思想可以解决
我们将该分行的数据结构信息提取的过程作为table item的结果,将分行作为一个关键词,将要索引的内容为另一个关键词,那么我们就可以实现索引了
例如我们要索引get-record获取某雇员的record 首先我们要传分部的type作为索引值,其次,我们要传递record作为索引值,
这样我们就获取了一个item (该分部的雇员的record查询)之后我们只要将雇员id之类的key值所谓索引即可查询
要实现以上功能,我们需要如下规定:
首先我们的个分部的文件结构需包含该分部的标签type 用来作为table索引值之一
其次我们的文件结构需要包含该结构是用于查询哪个项目的标签type作为table的另一个索引值,例如record
作为这个结构需要能够接受查询参数id之类的用以数据查询
现在假如我们要设计针对一个特定雇员查询其所在各分部的文件的record记录,那么我们可以建立一张各分部type表,然后依次传递至之前的record查询过程,
我们就可得到结果
最后是如果新并购一个公司,我们只需要将该公司的标签以及所含查询项过程合并入table (put 'new-division 'record new-division-record)即可
最后主要介绍了消息传递机制
以下是2-47所要求的代码
(define (make-polar r a) (define (dispatch m) (cond ((eq? m 'real-part) (* r (cos a))) ((eq? m 'imag-part) (* r (sin a))) ((eq? m 'magnitude) r) ((eq? m 'angle ) a))) dispatch)
该代码需配合operate使用,可代替real-part之类的函数过程
最后考虑:
本节三小节介绍的三种方法哪种适合加入数据类型,哪种适合加入操作类型
显然第一种加入数据类型需在每一个selecotor中添加一个数据类型判断比较麻烦
第二种则只需将表单扩建一列
第三种则新加一个make-new-data-type函数
显然2,3是比较方便的
考虑添加操作类型
第一种是添加一个操作函数
第二种是表单扩建一行
第三种则需要在每个make函数中添加一个判断语句
显然1,2是比较方便的
- SICP ex2-45
- SICP ex2-29
- SICP ex2-50
- SICP学习笔记5 ex2.17 -- ex2.23
- SICP ex2-1 modified rational arithmetic
- SICP(1985) ex2-2 line-segment
- SICP ex2-6 2-15 Alyssa
- SICP ex2-25 - ex 2-27
- SICP ex2-3 2-4 2-5(lambda calculus)
- ex2
- [Hashkell] ex2
- python ex2
- ex2.py
- sicp
- SICP
- 【SICP练习】45 练习2.4
- SCIP学习笔记-ex2.25--ex2.31
- 正则表达式ex2
- 浅谈设计模式之代理模式
- arm平台tslib的编译与qte源代码包配置中的-qt-mouse-tslib--转载
- Spring中@Async用法
- 微信投票活动为何能帮助公众号粉丝增长?
- 裸辞太久,这些条件你还不将就?!
- SICP ex2-45
- leetcode #26 in cpp
- (礼拜三log)递归树算法2
- AppStore审核神速,大大提高了审核速度。
- 解决 Tomcat v7.0 Server at localhost was unable to start within 45 seconds
- [Ubuntu]Ubuntu下用雷鸟 Thunderbird 导入 Outlook 导出的 .pst 文件
- 写了一段时间博客后的反思... ...
- Activity的生命周期及启动模式整理
- LeetCode 128. Longest Consecutive Sequence(最长连续序列)