【SICP练习】148 练习4.4

练习4-4

原文

Exercise 4.4. Recall the definitions of the special forms and and or from chapter 1:

● and: The expressions are evaluated from left to right. If any expression evaluates to false, false is returned; any remaining expressions are not evaluated. If all the expressions evaluate to true values, the value of the last expression is returned. If there are no expressions then true is returned.

● or: The expressions are evaluated from left to right. If any expression evaluates to a true value, that value is returned; any remaining expressions are not evaluated. If all expressions evaluate to false, or if there are no expressions, then false is returned.

Install and and or as new special forms for the evaluator by defining appropriate syntax procedures and evaluation procedures eval-and and eval-or. Alternatively, show how to implement and and or as derived expressions.

代码

 ((and? expr) (evaln (and->if expr) env)) 

 (define (and->if expr)
         (expand-and-clauses (and-clauses expr)))
 (define (expand-and-clauses clauses)
         (if (null? clauses)
             (make-if 'true 'true 'false)
                 (let ((first (car clauses))
                           (rest (cdr clauses)))
                    (if (null? rest)
                            (make-if first first 'false)
                        (make-if first (expand-and-clauses rest) 'false))))) 

 ((or? expr) (evaln (or->if expr) env))
 (define (or->if expr)
         (expand-or-clauses (or-clauses expr)))
 (define (expand-or-clauses clauses)
         (if (null? clauses)
             (make-if 'true 'false 'true)
                 (let ((first (car clauses))
                           (rest (cdr clauses)))
                  (make-if first 'true (expand-or-clauses rest))))) 



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

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



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


时间: 2024-10-25 13:40:23

【SICP练习】148 练习4.4的相关文章

[LeetCode]148.Sort List

[题目] Sort a linked list in O(n log n) time using constant space complexity. [分析] 单链表适合用归并排序,双向链表适合用快速排序.本题可以复用Merge Two Sorted Lists方法 [代码] /********************************* * 日期:2015-01-12 * 作者:SJF0115 * 题目: 148.Sort List * 来源:https://oj.leetcode.c

Lisp和SICP

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

智能手表Pebble在亚马逊上架,售价148.99美元

11月29日,据外国媒体报道,今天智能手表Pebble在亚马逊上架,售价148.99美元.有五种颜色可选.五种颜色分别是黑.灰.橙.红.白. Pebble在今年7月登陆百思买门店,本次在亚马逊上架正好赶上了美国火热的假日购物季,无疑能为它的销售再添一把火. 本月早些时候,Pebble对其iOS应用进行了重大升级. 新应用中完全整合了iOS 7的通知中心. Pebble可以接收到来自Twitter.Facebook和Instagram等潮流应用的通知,极大地扩展了这款智能手表的功能. 貌似包装盒也

创业板十大不靠谱公司: 恒信移动业绩下滑148%

创业板http://www.aliyun.com/zixun/aggregation/8124.html">公司上市后的问题层出不穷,有的标榜高成长性上市的公司,上市不久后业绩就出现变脸,甚至亏损连连,有的公司高管为了套现离职,导致公司管理层动荡股价下跌:还有的公司涉嫌财务违规等等. 创业板两周年之际,<投资者报>数据部对267家创业板公司进行评分梳理,从中找出了10家不靠谱的典型公司,投资者对这些公司应该小心为上. 恒信移动(300081.SZ) 中报业绩下滑最快 营收增长率

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

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

VB.NET 148十六进制移成64

问题描述 如题,,VB.NET148十六进制移成64 解决方案 解决方案二:Console.WriteLine(Convert.ToString(148,16))Console.WriteLine(148>>1)Console.WriteLine(Convert.ToString(148>>1,16)) 不知道你什么意思--解决方案三:148十六进制移成64???10进制148转16进制应该是94啊解决方案四:不是,数据结构是这样的低8位数据0D6D5D4D3D2D1D0中8位数据

【SICP归纳】5 泛型运算符

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

【SICP练习】1 练习1.1-练习1.5

 练习1.1 这道题主要是关于简单的数字运算,我们看完之后可以在MIT-Scheme中进行验算.如果环境不熟悉,可以参见[Scheme归纳]的第一篇博文.如果发现在MIT-Scheme等环境上的运算结果和自己算的不一样,也应该再仔细看看在书写代码的时候有没有手误.   练习1.2 这是一道将表达式转换成前缀形式的题目,博主最喜欢Lisp中的一大堆括号了.写完之后在Mit-Scheme中进行运算试试.   练习1.3 (define (sum-of-max x y z)         (co

【SICP归纳】2 高阶函数和数据抽象

上一篇博文对应的是书中的第一章的一二两节,我们已经大致的有了一种构造的感觉不是么.书中展示了很多有趣的句法(syntax).现在我们要让思想进一步的抽象,写这篇博客的时候并未学完整本书,更不敢说对书中的内容有一个多深的领悟.但我一路学习过来,就感觉书中的示例越来越抽象,作者所引导我们的也是如此方向.博文也会持续更新下去,伴随着我的理解. 在这个专栏的[Scheme归纳]4 高阶函数中已经初步介绍了什么是高阶函数(Higher-order Procedures).而在这一节中,将用高阶函数来做抽象