【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


时间: 2024-10-08 22:46:59

【SICP练习】147 练习4.3的相关文章

UVa 147 Dollars:经典DP&硬币组合数&整数拆分

147 - Dollars Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=83 和UVa 357一样. 注意所有数除以5再算. 完整代码: /*0.019s*/ #include<cstdio> #include<cstring> const int coin[11

TCPDF 5.9.147发布 生成PDF文件的PHP类

TCPDF 5.9.147该版本主要修复了SVG梯度的问题. TCPDF是一个无需外部扩展下能够快速生成PDF文件的PHP类.TCPDF支持所有ISO页面格式和自定义页面格式,还包含自定义边距和度量单位.UTF- 8 Unicode.RTL语言.HTML.barcodes.True TypeUnicode.TrueType.OpenType.Type1和CID- 0字体,以及图像.图形功能.裁剪.书签.http://www.aliyun.com/zixun/aggregation/33906.h

[LeetCode]147.Insertion Sort List

[题目] Sort a linked list using insertion sort. [分析] 无 [代码] /********************************* * 日期:2015-01-09 * 作者:SJF0115 * 题目: 147.Insertion Sort List * 来源:https://oj.leetcode.com/problems/insertion-sort-list/ * 结果:AC * 来源:LeetCode * 博客: ***********

逝世 63 年后,人工智能之父图灵的 147 封信重见天日

近日,一批图灵生前的信件资料在曼彻斯特大学被发现,这批信件并没有涉及图灵的个人生活,反而包含了很多图灵的学术研究和思考. 我不会喜欢这趟旅行.我痛恨美国. 写下这句话的,正是被后世评价为"计算机科学之父"和"人工智能之父"的英国科学家艾伦·图灵(Alan Turing).63 年前,这位科学巨匠在世人的不解中人世:63 年后,他成为世人尊敬和追思的对象:一批图灵生前的个人档案资料在这种追思中重见天日. 图灵 近日,英国曼彻斯特大学教授计算机科学系教授 Jim Mil

4年间为25家药企违规注册审批收受贿赂147万余元

行贿"名单"中不乏名企 国家药监局正处级调研员受审 本报讯(实习生 姬玮)记者今天获悉,因涉嫌违规帮25家公司做药品注册.审批,受贿147万余元,国家食品药品监督管理局正处级调研员卫良,昨天在东城法院受审. 由于被告人认罪,法院采取简易审理模式. 庭审现场 为25家药企违规注册审批受审 检方起诉称,2006年至2010年期间,卫良利用其担任国家食品药品监督管理局药品注册司生物制品处.药品安全监管司生产监督处调研员之便,违规为上海科华生物工程股份有限公司等25家公司在药品注册.变更.审批

Lisp和SICP

  大概不少programmer都看过<黑客与画家>,作者用了整整一章的篇幅讨论Lisp的强大.我自然就会手痒痒.      几个月前,几天内攻城略地搞定了Python,用的方法便是用Py重写之前开发的类库,这样就能很快熟悉语法,培养语感.喜上眉梢的我,也尝试将同样的策略用在Lisp上,我开始查看它的语法和函数,比如如何定义类和函数,如何赋值等等.      但我慢慢发现,Lisp几乎都不需要学语法,就是括号和几个基本过程,无非就是lambda, define, let,cons,car,cd

uva 147 Dollars(完全背包)

点击打开链接uva 147 思路: 完全背包 分析: 1 很明显裸的完全背包,注意一个地方就是输入的值不一定是小数点只有2位,这边我们应该分成两部分输入,最后注意输出即可 代码: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int MAXN = 30010; long long dp[MAXN]; in

【SICP归纳】3 层次性数据和符号数据

在学习书中第二章的时候有个问题一直让我很困扰,那就是2.2.4节的实例,因为没法输出书中华丽的图案,只能是一对英文字母.这在几个月前浅浅的学了一会Common Lisp的时候也是如此,当时看到书中有个实例是书中输出了很赞的线条,而我只会输出一堆点.后来才知道让Lisp输出图形化界面是更高层次的工程,想想还是先把SICP搞定. 上一篇博文中我们谈到了复合数据,关于它有两个重点.第一,数据抽象,这也就意味着你可以隔离那些数据对象.第二,在Lisp中有个特殊的方式能够黏住一些东西,它就是pair,而c

【SICP归纳】5 泛型运算符

关于数据抽象,有两个很重要的思想.一是在构建一些水平的抽象障碍在这个系统中.用某些对象来代换这些单独使用的抽象屏障.二是当需要使用某种形式的数据对象时,往往可以由其他人来将其实现,而我们并不需要知道具体操作.这都是在数据抽象方面非常强大的编程方法. 但是这还不足以完成一个真正复杂的系统.在这里的问题出在"其他人",作者常举的例子是Georges.归结来说,有很多人都工作在这个系统上,但所有的这些设计表达式很显然是不兼容的.问题是所有的整个系统却又不可能由一个人来完成,可又无法让所有的实