- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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 () ())tlisp入门(二)上一集我们讲了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)看到这里大家可能会问,为什么没有取表中除开头外其它某个位置上的元素的操作符,别急,等我们讲到地球人都知道的函数和递归你就知道该怎么办了,也许你现在已经想得差不多了?接下来要介绍给大家的是构成程序逻辑的一个基本功能……条件分支,在lisp中,它是由cond操作符完成的,cond是七个公理中最后一个也是形式最复杂的一个(欧几里德的最后一个公理也如是):(cond (p1 e1) (p2 e2)...(pn en))p1到pn为条件,e1到en为结果,cond操作符依次对p1到pn求值,直到找到第一个值为原子t(还记得吗?)的p,此时把对应的e作为整个表达式的值返回,例如: (cond ((eq a b) first)((atom a) second))second好了,至此我们已经有了lisp
您可能关注的文档
最近下载
- 职业暴露处置流程图.docx VIP
- SY∕T 5163-2018 沉积岩中黏土矿物和常见非黏土矿物 X 射线衍射分析方法.pdf
- 2024年衡阳市蒸湘区六上数学期末经典试题含解析.doc VIP
- 人教版四年级数学上册《应用题》专项练习题(含答案).docx VIP
- EIA-364-13C_插拔力测试标准.pdf VIP
- 《GB/T 45298-2025土壤制图 1∶25 000~1∶500 000土壤质地、酸碱度、盐渍化图的图式、用色及图例规范》.pdf
- NYT 2245-2012 县级农产品质量安全监督检测机构建设标准.docx VIP
- 铁路营业线换枕机更换轨枕施工工艺.pptx VIP
- 园林绿化养护工作计划方案.docx VIP
- 《光伏电站晶硅组件隐裂检测及判定方法》-征求意见稿.pdf VIP
文档评论(0)