首页
学习
活动
专区
工具
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 所说不是关于计算能力,而是关于人类能力和局限性。...然而,当我考虑特定计算时,经常对自己说:“期望这个两个元素列表名字和姓氏,但我期望那个两个元素列表复数实部和虚部,而我将把另一个两个元素列表视为分数分子和分母。”...——马文·明斯基,“为什么编程表达不清楚和粗糙构想好媒介” 《计算机程序结构与解释》麻省理工学院计算机科学入门课程。

12210

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

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

2.4K20

哪本书才是编程领域“九阴真经”

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

36220

如何学习编译原理

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

46920

如何掌握程序语言

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

1.1K90

期望与痛:SICP

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

1.8K60

如何掌握程序语言

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

1.1K40

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

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

60610

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

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

32420

【笨办法学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 不会限制你打开文件次数,事实上有时候多次打开同一个文件一件必须事情。

70430

程序设计思维

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

97840

用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} 这主要是写中文文档配置,当然他会提醒你下载一些包

55420

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

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

1.7K70

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

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

74060

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

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

1.2K20

给JAVA,说句公道话

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

76450

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

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

1.4K70

算法--天下武功,唯快不破

只写JS,为什么也要学习算法? 入行最开始时做网页设计,那是在2003年, 然后一路到了现在,... 所以做为读者你应该已经明白,一个野路子出身程序员。...其实内心一直很羞于称自己为程序员, 一般我会说自己,做网页、写JS,或是做前端。。 因为根本没有接受过正规计算机科学教育。...因为JS数组还是比较简陋(别问我哪简陋,问太多就等于打我脸,谢谢) 在最开始相当长时间里,JS都是比较小东西,最复杂不过搞几个插件而已。...例如昨天看过链表,它对数据和查找、插入、删除处理,就比数组要快很多。 这在简单应用上看不出来效果,但如果一个股票类网页要加载10000+行列表时候,就看出差别了。...但这不是数组问题。 计算机科学一门相对成熟学科,我们遇到许多问题,应该都早已有了相应解决方案,只是没学过所以我不知道。 想明白这一点时候,真是悲从中来。

63250
领券