关 于
献给所有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天等等,这让我这个英语水平不怎么样的人很难把意思翻译完整。暂时没想到更好的名称,先就这样吧。
致 谢
首先感谢原作者 Dorai Sitaram 给我们提供这么好的Scheme教程,他一直在维护本文(直到2013年仍有更新)
其次要感谢本文之前的几位翻译者,没有他们的工作我肯定无法把后面的翻译完(估计现在还在前几章打转呢~)
然后还要感谢我的毕设老师,如果没有毕设催着,我肯定没法完成这个工作(虽然大一就打算着看一遍但是大四了也没开始看。。。)
最后感谢王垠学长的博客CSS模板~(写了这么多到底有没有两万汉字啊???)
特别的感谢给我的爸爸妈妈,也希望所有看本文的人也都能真正幸福地生活。