Common Lisp:符号计算简单介绍(给讲师的贴士)

给讲师的贴士

近几年,如何跟有效地向初学者介绍Lisp的经验开始慢慢被总结出来:比如哪里是难点,以及我们怎么应对。另外,有一些切换到Lisp的既定主题是必须使学生领会的,特别是变量,作用域和赋值。此处的“简单介绍”的意思已经为Common Lisp完全改变了,包括了一些十分有价值的教学工具。让我介绍一些本书的Lisp标记法。

图形标记法

本书前两章使用盒子箭头标记法来描述原始函数和函数组合。在应付函数调用语法和何时使用引用等细节问题之前,这种标记法可以让学生建立起对于计算的基本概念,并了解三种基础的数据结构:数字,字符和列表。虽然对于富有经验的Lisp程序员来说,程序即是数据的概念有很大的好处,但与此同时,对于新手这也是产生迷惑的主要源头。盒子箭头标记法是将数据和程序在视觉上分隔开,从而排除大部分语法错误。这种标记法的另一个好处是缺少明确的变量;一个函数的输入就是函数定义外面指向进来的箭头。因为没有函数盒子标记法的计算机应用,所以前两章的学习被设计成为只需要纸和笔就可以快速学习。这种标记方法也将另一些令学生学习时会有挫败感的东西暂时隔离开来,不用马上学习一个真实计算机的机械细节,编辑表达式和应付调试器。
熟悉其他编程语言的读者可以花一分钟的时间快速浏览第一章,阅读最后的总结,然后浏览第二章学习一些基础的列表操作原语。
在第三章将会介绍标准EVAL标记法;引用的概念和具名变量的自然使用。这个时候,亲爱的读者(他或者她)想必已经迫不及待的想要扔掉纸和笔来接触一个真正的计算机了,从这里开始,将会真正进入这门令人兴奋的课程。

其他特征

有三个独特的特征将会首次叔现在第三章;EVAL标记法,Lisp工具箱章节和Lisp数据结构的综合图形表述,包括了函数对象和字符的内部结构。
EVAL标记法展示了Lisp表达式是如何一步一步被计算出来的,函数是如何应用到参数当中的,以及变量是如何被创造和绑定。EVAL和APPLY角色不同,使用这种标记法可以清楚地用图形化的方法将变量的作用域和语句的无法嵌套结构体现出来。图形化的标记法可是用读者都能记忆和使用的图形语言来阐述整个计算过程。
Lisp Toolkit章节介绍Common Lisp提供的丰富的编程辅助工具,比如DESCRIBE,INSPECT,TRACE,STEP,和调试器debugger。还有两个独立于本书的工具,他们的源代码在本书的附录A和附录B当中,也可以从发行商那里获得软盘版本。第一个工具就是SDRAW,可以用来cons cell简图。SDRAW是read-eval-draw学习循环的一部分,在给初学者讲解一些cons cell类型结构的时候是很有用的,特别是在讲解CONS,LIST和APPEND的区别的时候。第二个工具就是DTRACE,一个比TRACE手机更详细输出信息的追踪工具包,所以对初学者来说也更有用。
最后,Lisp数据的图形表述,特别是字符的内部结构,有字符的名字,函数,值,plist和package cells,帮助学生理解Lisp解释器的实质和字符,函数,变量和打印字符之间的区别重点。

后续章节的组织

第七章将会介绍Applicative Operator,在这里也会学习到语法闭包(lexical closures)。在第八章,前一版本的书里面龙的故事作为一个流行元素保留了下来,但是此处现在有一个新的设备支持,递归模板,帮助学生分析递归函数以理解递归风格的本质。考虑到一些讲师喜欢在applicatives之前讲述递归,有两章视为这种讲学顺序特别准备的。
本书前八章提倡一种清晰无副作用的编程风格。第九章讨论I/O,第十章建立一个统一的视角来看赋值(普通变量和全局变量),和有破坏性的序列操作。第十一章包含了迭代器,DO和DO*在没有明确赋值的情况下被使用在构造健壮的迭代语句。第十二章介绍结构,第十三章介绍数组,哈希表和属性列表。最后一张,第十四章介绍宏和汇编过程。期间也解释了语法和动态作用域的区别,EVAL图表清晰阐明了宏和特殊变量的语义。

对于简单的重视

因为Common Lisp是一门很复杂的语言,所以有一些地方我选择简化来更好的适应初学者的学习。比如1+和1-函数在本书中被删去了,因为他们的名字容易让人产生困惑。还有,本书中使用的的等于断言就是EQUAL断言,因为这是最经常使用到的等于断言,其他的诸如EQ,EQL,EQUALP和=这些断言将在进阶话题中介绍,但是并不是经常使用。在一些地方我选择写一些简单明了的函数而不是引入一个像PUSHNEW这样的模糊断言。另外我也不尝试覆盖所有最前沿的特性,例如多值和包系统。
一些人比较喜欢用Scheme作为入门课程的方言使用,因为他更加小巧,相较于Common Lisp来说。但是一个容易实用与教学的Common Lisp子集可以等同于Scheme,课程语言规模对于初学者来说并不是最首要的事情。另一个争论的焦点就是,一个确定的适合语言的风格,重用语法闭包可以使用Scheme语法更加优雅的表达出来。但是有些地方Common Lisp是优于Scheme的,比如对用户定义宏的支持,将列表和向量优雅的统一到一个序列数据类型里,对于键盘参数的实用极大的扩展了序列函数的可用性。讲强大的力量,厂商的支持和内建面向对象编程特色的结合造就了Common Lisp成为唯一的“工业强度”水准的Lisp方言。虽然本书侧重的无副作用,合适的编程方式使得Scheme狂热者们倍感亲切,但是确实是Common Lisp风格。
本书已经精心设计来迎合初学的编程人员和没有计算机背景的学生的基本需求,但是在每一章最后的可选的进阶话题提供了丰富的才来来满足对于跟高级的计算机知识有兴趣的人士。而对于有更加进阶的需要的读者,Guy L. Steele Jr.所撰写的Common lisp:The Language将会是一本更加有用的入门读物。Common Lisp:The Reference,Franz会是一本更合适的参考书。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容