logo资料库

scheme简明教程.pdf

第1页 / 共147页
第2页 / 共147页
第3页 / 共147页
第4页 / 共147页
第5页 / 共147页
第6页 / 共147页
第7页 / 共147页
第8页 / 共147页
资料共147页,剩余部分请下载后查看
介绍
【译者】关于本文
前言
第一章:进入Scheme
第二章:数据结构
第三章:代码结构
第四章:条件语句
第五章:词法变量
第六章:递归
第七章:输入输出
第八章:宏
第九章:结构
第十章:关联列表和表格
第十一章:系统接口
第十二章:对象和类
第十三章:跳转
第十四章:不确定性
第十五章:引擎
第十六章:命令行脚本
第十七章:CGI脚本
附录 A:Scheme方言
附录 B:DOS批处理
附录 C:数值运算
附录 D:可设为infinity的时钟
附录 E:参考文献
附录 F:索引
无关的:论Java语言符号表设计时的一些问题
Scheme 语言简明教程 目錄 介绍 【译者】关于本文 前言 第一章:进入Scheme 第二章:数据结构 第三章:代码结构 第四章:条件语句 第五章:词法变量 第六章:递归 第七章:输入输出 第八章:宏 第九章:结构 第十章:关联列表和表格 第十一章:系统接口 第十二章:对象和类 第十三章:跳转 第十四章:不确定性 第十五章:引擎 第十六章:命令行脚本 第十七章:CGI脚本 附录 A:Scheme方言 附录 B:DOS批处理 附录 C:数值运算 附录 D:可设为infinity的时钟 附录 E:参考文献 附录 F:索引 无关的:论Java语言符号表设计时的一些问题 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2
Scheme 语言简明教程 Scheme语言简明教程 译者:songjinghe 来源:TYS-zh-translation 译:Teach Yourself Scheme in Fixnum Days View On GitHub | 下载中文翻译ZIP | 英文原文online | 反馈问题 这是一本在国外比较有名的Scheme编程语言的入门教材。本教材适合任何对 Scheme编程语言感兴趣的人阅读,尤其是有其他编程语言(特别是动态语言)编 程经验,希望快速了解Scheme的不同点并且快速上手写点东西的人。然而希望系 统学习Scheme编程的学生仍然是本文的读者之一。 该教程中的大部分内容都能在常见的Scheme入门教材中找到,本教材中比较有特 色的是关于 continuation 和 call/cc 的内容,这也是Scheme的一大特点。第 十三章很详细的讲解了 continuation 和 call/cc ,十四十五章是它们的应用。 然而由于本人理解不够深入,这部分(其实整个文章都是)翻译得不堪卒读,所以 有问题请对照英文原文理解,也欢迎大家的反馈! 2009年的时候heros翻译了这篇文章的一部分(至第六章未完)。2010年的时 候lispor写了一份本教程的读书笔记。2012年的时候又有人试图翻译这篇文章。不 过后来貌似没有下文。Scheme的R5RS规范已经在2004年被译成了中文,而这篇 实践性比较强的文章却没有完整的中文译版。所以自己翻译了一份(前六章基本是 用的hero的版本),本人也是第一次接触Scheme,水平有限,大家多多包涵。 目 录 【译者】关于本文 前言 第一章:进入Scheme 第二章:数据结构 第三章:代码结构 第四章:条件语句 第五章:词法变量 第六章:递归 第七章:输入输出 第八章:宏 第九章:结构 第十章:关联列表和表格 第十一章:系统接口 第十二章:对象和类 第十三章:跳转 第十四章:不确定性 第十五章:引擎 介绍 3
Scheme 语言简明教程 第十六章:命令行脚本 第十七章:CGI脚本 附录 A:Scheme方言 附录 B:DOS批处理 附录 C:数值运算 附录 D:可设为infinity的时钟 附录 E:参考文献 附录 F:索引 无关的:论Java语言符号表设计时的一些问题 许可(License) 本译文的发布遵循与英文原文相同的LICENSE(即 GNU Lesser General Public License)。如有问题,请联系我。 This translated version is published under the same license(viz, the LGPL license) of the orginal english version. If you have any question, please contact me. 介绍 4
Scheme 语言简明教程 关 于 献给所有Scheme的有缘人 愿智慧仁爱之光永远照耀技术发展的道路 关于本文 该教程中的大部分内容都能在常见的Scheme入门教材中找到,本教材中比较有特 色的是关于 continuation 和 call/cc 的内容,这也是Scheme的一大特点,从 这点来说有过一些编程经验(特别是Python和Javascript等动态语言)的程序员会 觉得《Teach Yourself Scheme in Fixnum Days》非常适合他们,因为他们只有看 一眼马上就明白了Scheme与其他语言相同的地方,因此对某些絮絮叨叨讲语法等 基础知识的教程感到厌烦。而这篇文章主要是讲Scheme不同于其他编程语言的地 方(不包括语法),以及这种不同是如何应用在Scheme的代码中产生神奇的效果 的。当然还有一些命令行和网站CGI的东西,也许某些人希望了解一些。当然你也 可以像我一样把它作为学习SICP的入门辅导书。此外,本文还可以作为 MzScheme(即现在的Racket语言,之前叫PLT-Scheme)的入门教程。因为本文 使用的Scheme实现即是MzScheme。希望更深入学习Racket Lisp但感觉缺乏基础 的同志可以看看。 译文缘起及正名 2009年的时候heros翻译了这篇文章的一部分(至第六章未完)。2010年的时 候lispor写了一份本教程的读书笔记,翻译了很多内容(而我直到2014年毕设做完 也没有看到)。2012年的时候又有人试图翻译这篇文章。不过后来貌似没有下文。 Scheme的R5RS规范已经在2004年被译成了中文,而这篇实践性比较强的文章却 迟迟没有一个完整的中文译版。所以自己翻译了一份(前六章基本是用的hero的版 本),第六章后面又自己翻译了一些,顺便把附录也翻译了。这里要特别感谢我的 同学何ufo,虽然他也不是很懂Scheme,不过还是翻译了第七至第十二章,我只是 对他的翻译做了一些润色和校验(你发现了其实真正由我翻译的内容不是很多,只 是做了一些汇总和润色的工作而已,所以我也不敢以“译者”自居)。本人也是第一 次接触Scheme,水平有限,大家多多包涵。后期的任务就是看根据lispor的笔记来 校对整个译文。 《Scheme语言简明教程》这个名字已经被用滥了,我见过N篇大同小异的、国内国 外的Scheme教程都是这个名字(当然它们都没怎么 提 continuation 和 call/cc )。所以这样很不利于SEO。。。。不过翻译成 《N天学会Scheme》或者《无师自通Scheme语言》又好像有点太俗,而且你发现 了作者很聪明的用了一个“Fixnum Day”而不是常见的21天或者3天等等,这让我这 个英语水平不怎么样的人很难把意思翻译完整。暂时没想到更好的名称,先就这样 吧。 致 谢 【译者】关于本文 5
Scheme 语言简明教程 首先感谢原作者 Dorai Sitaram 给我们提供这么好的Scheme教程,他一直在维护本 文(直到2013年仍有更新) 其次要感谢本文之前的几位翻译者,没有他们的工作我肯定无法把后面的翻译完 (估计现在还在前几章打转呢~) 然后还要感谢我的毕设老师,如果没有毕设催着,我肯定没法完成这个工作(虽然 大一就打算着看一遍但是大四了也没开始看。。。) 最后感谢王垠学长的博客CSS模板~(写了这么多到底有没有两万汉字啊???) 特别的感谢给我的爸爸妈妈,也希望所有看本文的人也都能真正幸福地生活。 【译者】关于本文 6
Scheme 语言简明教程 前言 这是一篇Scheme编程语言的介绍。本文的目标是成为一篇快速上手教程。从未接 触过Scheme的新手可以在学习更复杂更深入的知识以前通过本文获得一些简明扼 要的关于Scheme语言的可实际操作的知识。 本文描述了一种干净利落但实用有效的编写Scheme程序的方法。虽然我们不会按 照索引把从A到Z开头的所有函数都介绍一遍,但是我们也不会回避Scheme一些难 理解的、凌乱的、非标准、不常用但是却可用或很有用的内容。包括call-with- current-continuation,系统接口和方言的多样性。我们的讨论将围绕我们将解决的 问题展开,而不是为了让读者对元语言有什么领悟,因此我并没有按照传统的 Scheme教程的思路来撰写本文。本文没有深入的教学方法,没有讲解Scheme语 义,没有元循环解释器,也没有讨论Scheme底层的实现,也没有论述Scheme的优 点。这并不是说这些东西是不重要的,而是说它们与某些人正在寻找的“快速教程 (我是说本文)”无关。 能有多快呢?我不知道一个人是否能在21天学会Scheme1,虽然我听有人说精通 Scheme的基本内容应该一个下午就够了。Scheme语言的标准——所有精准和复杂 的定义都包括进去——只有五十页长。这可能是因为真正对Scheme的大彻大悟 (当它到来时),只需一个下午,尽管在那之前不知要花费多少个下午。这就是我 的简单介绍。 感谢Matthias Felleisen把Scheme和高阶编程介绍给我,以及Matthew Flatt创造了 可靠和优雅的MzScheme实现(本书使用的Scheme即是MzScheme) ================== 一个Fixnum是一台机器认为“很小”的一个整数,每个机器对Fixnum都可以有自 己的看法 前言 7
Scheme 语言简明教程 第一章:进入Scheme 经典的第一个程序通常是把一个 "Hello world!" 显示在控制台上。用你最喜欢 的编辑器,创建一个名为 hello.scm 的文件,并在里面输入以下内容: ;The first program (begin (display "Hello, World!") (newline)) 第一行是一个注释,当Scheme发现一个分号,就把分号和这一行分号后面的文字 都忽略了。 begin 语句(原文为form)是Scheme用来包括子语句的方式,这个例子里有两 个子语句。第一句调用了 display 过程,该过程会输出它的参数(字符 串 "Hello, World!" )到控制台(或者叫“标准输出”)后面一句调用 了 newline 过程,该过程输出一个换行。 想要运行这个程序首先需要启动Scheme,通常只需要在你操作系统的命令行下面 输入你的Scheme可执行程序的名字即可。如果你用的是MzScheme,你需要在操 作系统提示符后面输入: mzscheme 这将调用Scheme listener程序,这个程序读取你的输入,求值,打印结果(如果有 的话),然后等待你的下一次输入。由此这通常被称为“读取-求值-打印”的循环。注 意这和你操作系统的命令行没有太大区别,操作系统的命令行也读取你的命令,执 行,然后等待其他命令。和操作系统一样,Scheme listener有它自己的提示符—— 通常是 > ,但也可能是其他的东西。 在Scheme listener里,加载文件 hello.scm 。直接运行下面的语句即可: (load "hello.scm") Scheme现在执行hello.scm文件的内容,输出 Hello, World! 接着后面是一个换 行符。然后你又得到了命令提示符,可以输入更多命令。 现在由于你有一个很好用的listener,所以你用不着每次把你的程序写到一个文件里 然后 load 它,有时候,特别是当你想试试某些东西的时候,直接在listener的提 示符后面输入表达式然后看结果会更简单。比如,在Scheme的提示符下输入: 第一章:进入Scheme 8
分享到:
收藏