Alyssa P. Hacker doesn't see why if needs to be provided as a special form. ``Why can't I just define it as an ordinary procedure in terms of cond?'' she asks. Alyssa's friend Eva Lu Ator claims this can indeed be done, and she defines a new version of if:
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause)))
Eva demonstrates the program for Alyssa:
(new-if (= 2 3) 0 5)
5
(new-if (= 1 1) 0 5)
0
Delighted, Alyssa uses new-if to rewrite the square-root program:
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
What happens when Alyssa attempts to use this to compute square roots? Explain.
今天中午午休的时候想了很久想不出来,后来看了下网上另一个人的解释,如下
(define (inc x y)
(new-if (= x y)
0
(inc (+ x 1) y)))
(inc 1 5)
我开始的时候想的是,第一次是展开成
(new-if (= 1 5)
0
(inc 2 5))
然后这个expression的结果我想成了是(inc 2 5),把new-if当成了if,按这样想下去,应该到(inc 5 5)的时候就该停止了,呵呵
其实是应该展开成上面的表达式后,会继续去eval ,(inc 2 5),然后遇到new-if,在去(inc 3 5),最后就栈溢出了,看来还是脑子太久没转了,
分享到:
相关推荐
《NOI题库1.6答案解析》 全国青少年信息学奥林匹克(National Olympiad in Informatics,简称NOI)是一项面向中学生的编程竞赛,旨在培养青少年的计算机科学素养和创新能力。题库1.6是NOI系列训练的一个重要部分,...
《OCPP1.6J学习质料》是关于充电桩领域的一个关键协议标准,它详细定义了电动汽车充电站(也称为充电点)与中央管理系统之间的通信规范。OCPP,全称Open Charge Point Protocol,是一个开放的、国际认可的协议,旨在...
这个版本的JRE1.6对于那些需要在32位系统上运行基于Java1.6技术的应用程序的用户来说至关重要。 JRE1.6是Java Development Kit(JDK)的一部分,JDK是用于开发和调试Java程序的工具集。JRE则包含了运行这些程序所需...
**OCPP 1.6:电动汽车充电站通信协议详解** OCPP(Open Charge Point Protocol)是一种开放的、基于XML的通信协议,专为电动汽车充电基础设施设计,用于充电桩(Charge Point)与充电站管理系统的交互。标题提到的...
JDK 1.6,也称为Java SE(标准版)6,是Java编程语言的一个早期版本,发布于2006年。它包含了Java编译器、Java虚拟机(JVM)、Java类库以及开发者用来创建、调试和部署Java应用程序所需的各种工具。 **JDK 1.6的...
mac for jdk1.6 jdk6 安装版 里面有两个jdk1.6的安装包,都可以用 如果电脑上安装有1.7,1.8等高版本jdk就不要再下安装包了,安装包安装会报错 命令是这个:brew install java6或 brew install homebrew/cask-...
**JDK 1.6版本详解** Java Development Kit(JDK)是Oracle公司提供的用于开发和运行Java应用程序的工具集合。JDK 1.6,也被称为Java SE 6,是Java平台的一个重要版本,发布于2006年12月11日。这个版本在Java社区中...
《CS1.6方言语音包:游戏文化与地域特色的声音艺术》 CS1.6,全称Counter-Strike 1.6,是一款经典的多人在线第一人称射击游戏,以其紧张刺激的对战体验和丰富的战术策略深受玩家喜爱。在这款游戏中,语音交流是团队...
标题中的“jdk1.6集成jjwt的问题”指的是在Java Development Kit (JDK) 版本1.6的环境下,尝试整合JSON Web Token (JWT) 库jjwt时遇到的挑战。JWT是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为 ...
OCPP 1.6版本是该协议的一个重要升级,旨在提高互操作性、安全性和效率。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在OCPP 1.6中,JSON被用作...
Java 1.6 中文帮助文档是针对Java开发者极其重要的参考资料,它包含了Java SE(标准版)1.6版本的所有API和技术细节。这份文档详细解释了各种类、接口、方法和异常,为开发者提供了全面的编程指导。以下是该文档中的...
根据提供的标题、描述以及部分内容,我们可以总结出与JDK1.6百度云下载相关的几个重要知识点: ### 一、JDK1.6简介 Java Development Kit(简称JDK)是Sun Microsystems公司针对Java语言开发的一套开发工具包,它...
JDK 1.6 版本是Oracle公司发布的一个早期版本,尽管现在已经有更新的版本(如JDK 8、11、17等),但在某些特定场景或兼容性需求下,仍需使用JDK 1.6。 **1. JDK的组成部分** - **Java编译器(javac)**:将源代码...
本资源"jdk1.6_green_32bit"是一个针对32位操作系统的绿色版JDK,无需安装即可使用,这在某些场景下非常方便,比如在没有管理员权限或者希望快速部署的环境中。 JDK 1.6,也被称为Java SE(标准版)6,是Oracle公司...
### 关于充电桩OCPP 1.6 测试用例文档(OCTT) #### 引言 本章节简要介绍了关于充电桩对接桩运营平台系统OCPP 1.6 Json协议测试用例文档的相关背景和目的。 ##### 关于文档 本文档旨在详细描述使用OCPP合规性...
IBM JDK 1.6是IBM公司为Java开发者提供的一个针对Linux 64位操作系统的Java开发工具包。这个版本的JDK是Java平台标准版(Java SE)的一部分,主要用于开发和运行Java应用程序、Web应用程序以及企业级应用。IBM JDK与...
**Java Development Kit (JDK) 1.6** JDK 1.6,也被称为Java SE 6,是Oracle公司发布的Java开发工具包的一个重要版本。这个版本在2006年发布,提供了许多增强的功能和优化,对于Java开发者来说是必备的工具。JDK...
aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-...
**OCPP 1.6:欧洲充电平台协议详解** OCPP(Open Charge Point Protocol)是一种国际标准,主要用于电动汽车充电基础设施的通信协议。该协议确保了电动汽车充电站(Charge Point)与充电网络管理系统(Charging ...
《CS1.6细节纹理增强补丁:提升游戏视觉体验的深度解析》 "CS1.6细节纹理增强补丁.rar"是一个专为经典第一人称射击游戏Counter-Strike 1.6(简称CS1.6)设计的优化工具,其主要目标是提升游戏中的环境和角色纹理的...