文档详情

lisp语言入门.pdf

发布:2016-03-12约1.16万字共14页下载文档
文本预览下载声明
Lisp 语言入门 Lisp 是一门历史悠久的语言,全名叫 LISt Processor ,也就是“表处理语言”,它是由John McCarthy 于 1958 年就开始设计的一门语言。和 Lisp 同时期甚至更晚出现的许多语言如 Algo 等如今大 多已经消亡,又或者仅仅在一些特定的场合有一些微不足道的用途,到现在还广为人知的恐怕只剩下了 Fortran 和 COBOL。但唯独 Lisp ,不但没有随着时间而衰退,反倒是一次又一次的焕发出了青春,从 Lisp 分支出来的 Scheme、ML 等语言在很多场合的火爆程度甚至超过了许多老牌明星。那么这颗常青树 永葆青春的奥秘究竟在哪里呢? 如果你只接触过 C/C++、Pascal 这些“过程式语言”的话, Lisp 可能会让你觉得十分不同寻常,首先吸 引你眼球(或者说让你觉得混乱的)一定是 Lisp 程序中异常多的括号,当然从现在的角度来讲,这种设计 的确对程序员不大友好,不过考虑到五六十年代的计算机处理能力,简化语言本身的设计在那时算得上是当 务之急了。 Lisp 的基本语法很简单,它甚至没有保留字(有些语言学家可能对这一点有异议,别怕,我听你们的),它 只有两种基本的数据,仅有一种基本的语法结构就是表达式,而这些表达式同时也就是程序结构,但是正如 规则最简单的围棋却有着最为复杂的变化一样,Lisp 使用最基本的语言结构定义却可以完成其它语言难于实 现的、最复杂的功能。 废话少说,现在我们就来看看Lisp 语言中的基本元素。 Lisp 的表达式是一个原子(atom)或 (list) ,原子(atom)是一个字母序列 ,如abc ;表是由零个或多个 达式组成的序列 ,表达式之间用空格分隔开,放入一对括号中,如 : abc () (abc xyz) (a b (c) d) 最后一个表是由四个元素构成的,其中第三个元素本身也是一个表。 正如算数表达式 1+1 有 2一样,Lisp 中的表达式也有 ,如果表达式e 得出 v ,我们说e 返回v。如 果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符 ,其余的元素叫做自变量。 正如欧几里德的几何世界中有五个公理一样,我们在这里给出 Lisp 世界中的 7个公理(基本操作符): (quote x)返回x ,我们简记为x (atom x)当 x是一个原子或者空表时返回原子t ,否则返回空 ()。在 Lisp 中我们习惯用原子t 示真 ,而 用空 () 示假。 (atom a) t (atom (a b c)) () (atom ()) t 现在我们有了第一个需要求出自变量 的操作符 ,让我们来看看quote 操作符的作用——通过引用 (quote)一个表,我们避免它被求 。一个未被引用的表达式作为自变量 ,atom 将其视为代码 ,例如 : (atom (atom a)) t 反之一个被引用的表仅仅被视为 (atom (atom a)) () 引用看上去有些奇怪 ,因为你很难在其它语言中找到类似的概念 ,但正是这一特征构成了 Lisp 最为与众不 同的特点——代码和数据使用相同的结构来 示 ,而我们用quote 来区分它们。 (eq x y)当 x和 y 的值相同或者同为空表时返回t ,否则返回空 () (eq a a) t (eq a b) () (eq () ()) t 下一章 ,我们将讲解与 相关的操作符和条件操作符 ,以及Lisp 程序的基本元素——函数。 一集我们讲了 Lisp 世界七个公理的前三个 ,这一集我们接着讲剩下的四个。 首先是三个 操作 (car x)要求x是一个表,它返回x中的第一个元素 ,例如 : (car (a b)) a (cdr x)同样要求x是一个表,它返回x中除第一个元素之外的所有元素组成的表,例如 : (cdr (a b c)) (b c) (cons x y)要求y 是一个表,它返回一个表,这个表的第一个元素是 x ,其后是 y 中的所有元素 ,例如 : (cons a (b c)) (a b c) (cons a (cons b (cons c ()))) (a b c) 看到这里大家可能会问 ,为什么没有取表中除开头外其它某个位置上的元素的操作符 ,别急,等我们讲到地 球人都知道的函数和递归你就知道该怎么办了,也许你现在已经想得差不多了? 接下来要介绍给
显示全部
相似文档