文档章节

【SICP练习】151 练习4.7

NoMasp
 NoMasp
发布于 2015/09/08 21:48
字数 343
阅读 2
收藏 0

练习4-7

原文

Exercise 4.7. Let* is similar to let, except that the bindings of the let variables are performed sequentially from left to right, and each binding is made in an environment in which all of the preceding bindings are visible. For example

(let* ((x 3) (y (+ x 2)) (z (+ x y 5))) (* x z))

returns 39. Explain how a let* expression can be rewritten as a set of nested let expressions, and write a procedure let*->nested-lets that performs this transformation. If we have already implemented let (exercise 4.6) and we want to extend the evaluator to handle let*, is it sufficient to add a clause to eval whose action is

(eval (let*->nested-lets exp) env)

or must we explicitly expand let* in terms of non-derived expressions?

分析

这道题和上一道很类似,抓住题中的要点就会迎刃而解啦。那就是说从左至右求值,那么我们可以用list和car以及cdr来完成,核心思想是用递归,不断的向右边推进,直到exp为空,此时就返回body,然后结束构造。至于tagged-list?这些和上一题都是一样的。

代码


(define (let*? expr) (tagged-list? expr 'let*))

(define (let*-body expr) (caddr expr))

(define (let*-exp expr) (cadr expr))

(define (let*->nested-lets expr) (let ((exp (let*-exp expr)) (body (let*-body expr))) (defien (make-lets exprs) (if (null? exprs) body (list 'let (list (car exprs)) (make-lets (cdr exprs))))) (make-lets exp)))



为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp

版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp

本文转载自:http://blog.csdn.net/nomasp/article/details/44802059

NoMasp
粉丝 7
博文 334
码字总数 0
作品 0
镇江
程序员
私信 提问
加载中

评论(0)

《神经网络和深度学习》之神经网络基础(第三周)课后作业——一个隐藏层的平面数据分类

由于没有找到课后练习,所有练习文章均参考点击打开链接,我已经将所有代码都实现过一遍了,没有错误,感谢博主 欢迎来到第三周的课程,在这一周的任务里,你将建立一个只有一个隐含层的神经...

bxg1065283526
2018/05/02
0
0
《Java编程思想》第四版读书笔记 第四章

4.3 逗号操作费仅用于for循环控制表达式的初始化部分和步进控制部分。初始化部分用于定义任意多个具有相同类型的变量: for(int i =1, j = i + 10; i <5; i++, j = i* 2) for循环控制表达式可...

一万
2016/05/02
143
0
关东升的《从零开始学Swift》3月9日已经上架

大家一直期盼的《从零开始学Swift》于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发。全书共分5 部...

tony关东升
2018/06/26
0
0
[书目20191231]信息系统项目管理师教程(第3版)目录

第1章 信息化和信息系统 1 1.1 信息系统与信息化 2 1.1.1 信息的基本概念 2 1.1.2 信息系统的基本概念 5 1.1.3 信息化的基本概念 7 1.1.4 信息系统生命周期 10 1.2 信息系统开发方法 12 1.2...

freeliver54
2019/12/31
0
0
关东升的《《从零开始学Swift》即将出版

大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版《从零开始学Swift》《从零开始学Swift》将在《Swift开发指南》第1版的基础上添加Swift2.0的...

智捷课堂
2015/08/17
117
0

没有更多内容

加载失败,请刷新页面

加载更多

redis+lua 实现分布式令牌桶,高并发限流

方案一、在提供给业务方的Controller层进行控制。 1、使用guava提供工具库里的RateLimiter类(内部采用令牌捅算法实现)进行限流 2、使用Java自带delayqueue的延迟队列实现(编码过程相对麻烦,...

stys35
28分钟前
15
0
socket编程之websocket实现

主要实现私聊和群聊两个功能,要在web端实现想微信QQ那样的即时通讯的功能,我们需要了解一下websocket。 websocket是一种可以双向通讯的长连接协议,http是获取完数据就关闭,websocket则可以...

php开源社区
35分钟前
28
0
这款Mac视频下载神器,轻松解决1000多个视频网站下载难题!

Mac视频下载工具哪款好用?号称Mac届经典的网页视频下载神器,支持 1000 多个流媒体网站的视频下载,包括YouTube,优酷,Bilibili,Vimeo等,,让你轻松解决视频下载难题! Downie 4 Mac版值...

mac小叮当
37分钟前
22
0
基于三维GIS技术的矢量地图动态LOD渲染方法

本文从地图操作和要素可见性入手分析地图简化的影响因素,并基于分析的结果设计相应的缓存结构以加速地图的渲染。研究GPU环境下梯形格网的高效LOD方法,探讨简化前后节点的重组和显存中EBO数...

ZTMAP
41分钟前
27
0
Docker安装MySQL&Redis

Docker安装MySQL 下载 mysql 镜像 docker pull mysql:5.7 启动容器 docker run -p 3306:3306 --name mysql \-v /mydata/mysql/log:/var/log/mysql \-v /mydata/mysql/data:/var/lib/mysq......

农夫三拳有点疼-_-
41分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部