首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SICP ex 3.17 -计算配对-我看不出为什么我的答案是错的

SICP ex 3.17是《计算机程序的构造和解释》(Structure and Interpretation of Computer Programs)一书中的一个习题。这个习题涉及到计算配对(computational pairs)的概念。

计算配对是一种数据结构,它由两个元素组成,通常称为"cons"。一个元素是配对的"car",另一个元素是配对的"cdr"。这种数据结构可以用来构建更复杂的数据结构,如链表和树。

在SICP ex 3.17中,问题是要求实现一个过程last-pair,它接受一个链表作为参数,并返回该链表的最后一个配对。如果链表为空,则返回一个错误。

以下是一个可能的实现:

代码语言:txt
复制
(define (last-pair lst)
  (cond ((null? lst) (error "Empty list"))
        ((null? (cdr lst)) lst)
        (else (last-pair (cdr lst)))))

这个实现使用了递归来遍历链表,直到找到最后一个配对。如果链表为空,就会抛出一个错误。

这个问题中没有明确要求使用腾讯云的相关产品,因此不需要提供相关产品和链接地址。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

NUS CS1101S:SICP JavaScript 描述:前言、序言和致谢

对于最后一个问题的令人惊讶的答案是“是的”;构造一个接受(1)作为某个其他函数描述的数据结构和(2)参数列表的函数,当应用于给定的参数时,其行为与该其他函数完全相同,只是稍微有些棘手。...设计一个能够描述任何计算的数据结构也只是稍微有些棘手。这本书的第 4 章中描述了这样的一个数据结构(表达式和语句的标记列表表示,配对环境将名称与值关联)和这样一个通用函数(apply)。...理论上是这样的。实际上,我们发现方便的是划分出有助于我们作为构建计算描述的人类来组织代码结构,以便更好地理解它们的区别。我相信 Perlis 所说的不是关于计算能力,而是关于人类的能力和局限性。...然而,当我考虑特定的计算时,我经常对自己说:“我期望这个两个元素的列表是名字和姓氏,但我期望那个两个元素的列表是复数的实部和虚部,而我将把另一个两个元素的列表视为分数的分子和分母。”...——马文·明斯基,“为什么编程是表达不清楚和粗糙构想的好媒介” 《计算机程序的结构与解释》是麻省理工学院计算机科学的入门课程。

19810

GitHub 上这个「计算机科学」自学指南火了!

互联网上,到处都有许多的学习资源,然而精华与糟粕并存。你所需要的,不是一个诸如 “200 + 免费在线课程” 的清单,而是以下问题的答案: 你应当学习哪些科目,为什么?...我们认为 DeNero 的课程也很不错,有的学生可能更喜欢,但我们还是建议把 SICP, Scheme 和 Brian Harvey 的视频课程作为首选。 为什么这么说呢?...诀窍是先从特定的技术回退到基本的领域或概念,判断这门流行技术在技术的宏观大局中位于何处,然后才深入学习这门技术。 为什么你们还在推荐 SICP?...先尝试读一下,有些人觉得 SICP 让人神魂颠倒,这在其他书很少见。如果你不喜欢,你可以尝试其他的东西,也许以后再回到 SICP。 为什么你们还在推荐龙书? 龙书依旧是内容最为完整的编译器单本书籍。...如果仍旧寻求更加便宜的购买渠道,可以参考这篇 V2EX 上的讨论帖子,其中提到了一些不错的购买渠道。 这份指引是谁写的?

2.5K20
  • 哪本书才是编程领域的“九阴真经”

    前几天在公众号调查了下“对自己编程影响最大的一本书是什么”,答案基本不出我所预料:SICP、HTDP、 K & R C、Hackers and Painters 占据上风。...我曾经花了好几年时间去读 SICP,大概读了三四遍,仔细钻研里面的每一道习题,收获也颇丰,对各种语言现象(递归、CPS、惰性求值、非确定性计算与流处理)、编译器、可计算行问题等有了深刻认识。...可是,编程并不仅仅是一门纯学术的学科,或者说相反,是一门需要通过反复实践才能有所成长的艺术,与音乐、美术同等地位。...音乐家创作的优美旋律,美术家绘出的色彩和线条,都是他们与世界沟通的语言,而于程序员而于,毫无疑问是代码充当了这个角色。...他们的那些回忆对于正在进阶中的 coder 来说是无比珍贵的财富,我觉得 具体的知识可以通过不同方式习得,但往往就是这种洞察一切的回忆与畅谈,是我们年轻程序员所缺少的。

    39120

    自供电心内起搏器-nature24.01.13

    这是我找到的起搏器的峰值能量 输出的起搏波形,在500Ω的条件下 X光的照片 右心室(RV)装置示意图,用于将生物机械能从心脏运动转换为电能并调节心律失常,该装置由能量收集单元(EHU)、电源管理单元和起搏器模块...单独的在重要节点上面标注 电压电流电荷直接的关系,可以看到都是成正比的 这公式好理解,就这样吧 电流其实是nA级别的 爆炸图,也看不出来个啥 两个电解质的电镜照片,看不出来个啥 PMU&PM的长度和宽度分别为...电容器的电压在 9000 秒内从 0 V 充电到 3 V,与体内 SICP 的电输出相同。...植入前后的心电图和血压信号,没啥影响 随着心脏周期性的生理收缩和舒张,小球在SICP中自由运动,电信号表现出一定的波动性。推测电信号的波动也可能受到血流的影响。...但是我表示怀疑,因为起搏器是长时工作的,这样及时发电的模式可能不如纽扣电池的稳定电压源稳定。 其次就是纳米摩擦的效率确实是很低。

    10010

    如何学习编译原理

    对于没有计算机科学基础知识的程序员或初学者来说 一上来就看龙书 虎书是行不通的 全是理论知识 看得想睡觉 我还试过看网易云大学计算机专业的编译原理课程 也是看得一头雾水 看到80多讲就看不下去了 另外...SICP(计算机程序的构造和解释)这本很多人推荐的书其实并不适合初学者 前3章和后面几章难度差别有点大 可能是自己水平不行 看SICP解释器和编译器那两章也是看不懂 虽然强迫自己看完 但是最后还是不懂编译原理到底是怎么回事...不过 后来我还是通过学习一本书的知识 写出来了一个简单的编译器 注意 是真正动手写出来了一个编译器 不是停留在理论阶段 这本书简单 通俗易懂 对计算机体系知识有一个较全面的介绍 而你只需要会一门编译语言就行了...它就是 《计算机系统要素》 这本书前面5章讲的是硬件知识 虽然跟编译原理没什么关系 但是对于了解计算机硬件知识是很有用的 重点是通俗易懂 后面的章节就是和编译原理有关的知识了 书里的内容介绍了 汇编编译器...最终写出了一个编译器 算是对编译原理有了一个比较全面但不深入的了解吧 这个时候再去看龙书 虎书 就不会感觉很吃力了 附上我完成这本书所有项目的答案 https://github.com/woai3c/

    51820

    如何掌握程序语言

    这原因也许在于程序语言的设计不是科学,它类似于圣经,它没法被“证伪”。没有任何实验可以一下子断定那种语言是对的,那种是错的。所以虽然你觉得自己有理,却很难让人信服。...你现在认为是对的东西,也许不久就会被你认为是错的,反之亦然。 如何掌握程序语言 看到了一些常见的错误心理,那么我们来谈一下什么样的思维方式会更加容易的掌握程序语言。 1. 专注于“精华”和“原理”。...3】接近底层的语言是否一定速度快? 对于第一个问题,答案是否定的。其实编程最重要的思想是高层的语义(semantics)。语义构成了人关心的问题以及解决它们的算法。...SICP 比较适合作为第一本教材。但是我需要提醒的是,你最多只需要看完前三章。因为从第四章开始,作者开始实现一个 Scheme 解释器,但是作者的实现并不是最好的方式。...因为你会直观的看到为什么现在的计算机系统会设计成这个样子:为什么处理器里面有寄存器(register),为什么需要堆栈(stack),为什么需要堆(heap),它们的本质是什么。

    1.2K90

    如何掌握程序语言

    这原因也许在于程序语言的设计不是科学,它类似于圣经,它没法被“证伪”。没有任何实验可以一下子断定那种语言是对的,那种是错的。所以虽然你觉得自己有理,却很难让人信服。...你现在认为是对的东西,也许不久就会被你认为是错的,反之亦然。 如何掌握程序语言   看到了一些常见的错误心理,那么我们来谈一下什么样的思维方式会更加容易的掌握程序语言。 1....3】接近底层的语言是否一定速度快?   对于第一个问题,答案是否定的。其实编程最重要的思想是高层的语义(semantics)。语义构成了人关心的问题以及解决它们的算法。...SICP 比较适合作为第一本教材。但是我需要提醒的是,你最多只需要看完前三章。因为从第四章开始,作者开始实现一个 Scheme 解释器,但是作者的实现并不是最好的方式。...因为你会直观的看到为什么现在的计算机系统会设计成这个样子:为什么处理器里面有寄存器(register),为什么需要堆栈(stack),为什么需要堆(heap),它们的本质是什么。

    1.2K40

    我的期望与痛:SICP

    几天前,袁英杰在微信中推荐《计算机程序的构造和解释》(Structure and Interpretation of Computer Programs,SICP)。...Interpretation of Computer Programs《计算机程序的构造和解释》(即SICP)。...本书讲的是一些最基本的问题,比如什么是计算、什么是抽象、什么是模块化、乃至什么是时间和什么是自然数。...有人不无夸张但相当在理地说:自SICP以降,无并发的编程没有任何新鲜问题;如果你觉得自己有了新发现,要么是SICP已经写过只是你不知道,要么是你想错了。 这一段是熊节的推荐。...可惜当时我出差在外,没有机会参与这个有趣的活动。至今想来抱憾。 按:clojure是我一直想学却一直未学的一门语言,而SICP是我一直想读却一直未读的一本书。

    1.9K60

    why哥被一道基础面试题给干懵了,一气之下写出万字长文。

    前段时间我发现书的最后还有两道 Java 基础的面试题。其中有一道,非常的基础,可以说是入门级的题,但是都把我干懵了。 ? 居然通过眼神编译,看不出输出结果是啥。 最后猜了个答案,结果还错了。...两个考点 先看看答案: ? 怎么样,这个答案是不是和你自己给出来的答案一致呢? 反正我之前是被它那个 default 写在中间的操作给迷惑了。 我寻思这玩意还有这种操作?能这样写吗?...所以,这小节的答案是这样的吗?肯定不是的,我们多想一步: 为什么这样规定呢? 这才是这小节想要带大家寻找的东西。 首先你得知道 switch 支持 String 是 Java 的一颗语法糖。...明白为什么这样写了吧? 所以,这小节的答案是这样的吗?肯定不是的,我们再多想一步呢: 为什么要非得把 String 取 hashCode 才进行 switch/case 操作呢?...lookupswitch 指令拿着 switch 表达式计算出来的 int 值和一个表中偏移量进行配对(pairs)。

    62510

    组织哈工大技术兴趣讨论班的心路历程

    其实,计算机和软件学院有很多的技术社团,也有很多人技术很不错的,但我总觉得差了点东西。 最开始,大概在2015年,我想办一个技术社区。...早就计划了要搞一点事情的我,必然要混进新生群去,因为之后的学院群的创建(比如“哈工大2017计算机”之类)多半可以从这样的新生群里面得知,同时还可以先混个脸熟,将来搞事情的时候不会冷场。...说实话,我在一开始的意见征集过程中就明确标注了:C语言是软件大一上学期的课程、计算机大一下学期的课程,等等。...CSAPP和SICP的讨论班的时间是连着的,因为还要给他们开咖啡店的门,所以索性我就两个讨论班都参加一下——CSAPP只负责旁听,SICP参与分享。...真正让我发飙了的,是有一次CSAPP的讨论班只来了寥寥几个人(正常大概实在10个左右的,第一次讨论班那个小咖啡店都人满为患了),而随后的SICP讨论班更是一个人都没有来。哦不,来了一个,那就是我。

    34120

    【笨办法学Python】习题15读取文件

    你应该看到的结果 我的脚本叫 “ex15_sample.txt”,以下是执行结果: $ python ex15.py ex15_sample.txt Here's your file 'ex15_sample.txt...在每一行的上面用注解说明这一行的用途。 2. 如果你不确定答案,就问别人,或者上网搜索。大部分时候,只要搜索 “python” 加上你要搜的东西就能得到你要的答案。...现在能告诉你的是, sys 是一个代码库,这句话的意思是从库里取出 argv 这个功能来,供我 使用。后面你会学到更多相关知识。...我把文件名写进去写成 script, ex15_sample.txt = argv 不过这样不灵。 这么做是错的。把代码写成和我一模一样,然后从命令行运行,照着我的方式。...为什么打开了两次文件没有报错? Python 不会限制你打开文件的次数,事实上有时候多次打开同一个文件是一件必须的事情。

    72330

    程序设计思维

    《SICP》的全名是《Structure and Interpretation of Computer Programs》,中文译名《计算机程序的构造与解释》。...我今天就不介绍这本书的内容了,这些等我读完了再来做个全面的介绍,这次我只想把今天看书的收获记录下来。 《SICP》里有很多示例代码,我一开始老看着别扭,今天我对这个别扭的原因进行了深入的思考。...)风格的描述,但是里面用的这些子函数到底是在哪里定义的啊,怎么就突然拿来用了呢?...但是在《SICP》中并非如此,由于Scheme支持函数式编程,抽象粒度更细(以函数为单位,而不是对象或者类),所以作者是站在一个很高的抽象层面上看待问题,理清问题的脉络,很快地给出一个原型,这个原型已经解决了问题...《SICP》的精髓在于合理的抽象和管理复杂度,我觉得这也是编程和软件工程的精髓。

    1K40

    用LaTeX进行论文排版

    都知道写文档论文之类的肯定是用LaTeX比较漂亮,虽然我对用LaTeX写数学公式稍微有点了解,但是还是没有直接用它来排版。下面就整理下用LaTeX写文档的方法。...安装 最常用的LaTeX排版工具是MikTeX。选择好windows版本,下载安装即可。可执行文件是%install_path%/miktex/bin/x64/texworks.exe。...我找到的模板如下:(用pdfLaTeX+MakeIndex+BibTex编译) \documentclass[a4paper, 11pt]{article} %%%%%% 导入包 %%%%%% \usepackage...]%链接、注解% \xiaosihao 苏州大学 2014级计算机学院\\[2ex] } \date{2016年6月} %%%% 以下部分是正文 %%%% \maketitle \tableofcontents...\newpage --这里是正文-- \newpage%这个newpage很重要,不加的话可能会莫名报错...% \end{CJK} \end{document} 这主要是写中文文档的配置,当然他会提醒你下载一些包

    60920

    给JAVA,说句公道话

    Java超越了所有咒骂它的“动态语言” 也许是因为年轻人的逆反心理,人们都不把自己的入门语言当回事。很早的时候,计算机系的学生用Scheme或者Pascal入门,现在大部分学校用Java。...这也许就是为什么很多人恨Java,瞧不起用Java的人。提到Java,感觉就像是爷爷那辈人用的东西。大家都会用Java,怎么能显得我优秀出众呢?于是他们说:“Java老气,庞大,复杂,臃肿。...我看不出来JavaScript社区开那些会议,到底有什么意义,仿佛只是为了拉关系找工作。 Python凑合可以用在不重要的地方,Ruby是垃圾,JavaScript是垃圾中的垃圾。...可是开始接触Scala没多久,我就很惊讶的发现,有些非常基本的东西,Scala都设计错了。这就是为什么我几度试图采用Scala,最后都不了了之。...甚至有人把SICP,The Little Schemer等名著里的代码,全都用Clojure改写一遍,结果完全失去了原作的简单和清晰。

    83550

    一件交互设计大事,确定按钮放在左还是右?

    其实这个问题,连世界最大的IT公司都没有确切的答案。...*: 微软的电脑设备 微软的移动设备 为了弄清楚这个问题,我做了一个实验: 试验中A组和B组的区别只是交换了按钮位置 我一共找了30人,先让他们在九张图中选择最喜欢的一张,然后按确定按钮提交。...然而2个人未免有点少,不够说服力,所以到这里还看不出什么证据。...如果不是亲自做的这个实验,我可能不会相信这个结果。 那么,为什么唯独将确定按钮从右换到左时,才有超过一半的人点错呢?...我的推测如下:从两组的第一步实验就可看出端倪,人们是比较习惯确定按钮在右边的,所以B组的第一步才*没有人出错*。

    1.8K70

    资深架构师谈Java——最牛逼的编程语言

    Java超越了所有咒骂它的“动态语言” 也许是因为年轻人的逆反心理,人们都不把自己的入门语言当回事。很早的时候,计算机系的学生用Scheme或者Pascal入门,现在大部分学校用Java。...这也许就是为什么很多人恨Java,瞧不起用Java的人。提到Java,感觉就像是爷爷那辈人用的东西。大家都会用Java,怎么能显得我优秀出众呢?于是他们说:“Java老气,庞大,复杂,臃肿。...我看不出来JavaScript社区开那些会议,到底有什么意义,仿佛只是为了拉关系找工作。 Python凑合可以用在不重要的地方,Ruby是垃圾,JavaScript是垃圾中的垃圾。...可是开始接触Scala没多久,我就很惊讶的发现,有些非常基本的东西,Scala都设计错了。这就是为什么我几度试图采用Scala,最后都不了了之。...甚至有人把SICP,The Little Schemer等名著里的代码,全都用Clojure改写一遍,结果完全失去了原作的简单和清晰。

    1.4K70

    这是一篇非常具有操作性的程序员初学者攻略。

    首先你得有一个 maxSoFar 变量,之后对于每个数… •语法:我怎样用某种编程语言表达这些算法,让计算机能够理解。 •系统基础:为什么 while(1) 时线程永远无法结束?...为什么 int *foo() { int x = 0; return &x; } 是不可行的? 启蒙阶段的初学者若选择C语言作为第一门语言会有点困难,但是这是绝佳的选择。 ?...这时候你需要做的是反思自己曾经写过的程序,去思考程序为什么 (Why) 要这样设计?思考怎样 (How) 写出更好的程序?试图去探寻理解编程的本质:利用计算机解决问题。...此外,SICP 的教学语言为 Scheme,可以让你初步了解函数式编程。更重要的是,他的语法十分简单,你可以很快学会它,从而把更多的时间用于学习书中的编程思想以及复杂问题的解决之道上。...不,我说错了,即使是高富帅也不会有强力精神力,他也会怀疑自己,觉得自己没钱就什么都不是了。但总之,你遵循指南好好看书,那就会体验「会当凌绝顶」的感觉。

    77060

    Tello talent无人机扩展模块库分析(default.ino)

    虽然有注释,但是有点少.而且宏都是大写 一眼也看不出来,我处理一下 ?...这个是创建几个对象 RGB上面哪个灯 ? 就是这个! ? 灯,矩阵灯 ? 游戏手柄 ? Tof传感器 ? 配对模式 ?...这意味着我们可以拥有可以从数据总线读取的RAM或可以从指令总线读取的RAM。 这就引出了一个问题,您将把什么放入可从指令总线读取的RAM?答案是(如果我理解正确的话)...指令(可执行代码)。...这意味着可以将控件从正常运行的应用程序中传递给此代码(通常),并且它将“起作用”,因为该代码位于指令总线地址空间中。 现在剩下的就是“为什么”要这样做?答案是考虑替代方案。...如果您要运行的代码不在RAM中,那么它还能在哪里?答案是“闪存”……如果它在闪存中,则当接收到执行该代码的请求时,必须从那里执行该代码。

    1.3K20
    领券