一、认识Lisp

  • 全名:LISP Programming Language
  • 定位:通用高级计算机程序语言。
  • 用途:长期以来垄断人工智能领域的应用。LISP作为应用人工智能而设计的语言,是第一个声明式系内函数式程序设计语言,有别于命令式系内过程式的C、Fortran和面向对象的Java、C#等结构化程序设计语言。
  • 背景:20世纪50年代中期,在大多数计算机处理的都是数值数据等,包括语言学、心理学和数学领域上一些人们开始对人工智能产生了兴趣。觉得必须实现共同需要的一个方法,使计算机能够处理链表中的符号数据,允许语言的处理、信息存入和检索、定理证明的过程机器化。IBM是首先对人工智能开发有兴趣的商业机构之一。1958年夏天,来自麻省理工学院的人工智能研究先驱约翰·麦卡锡(John McCarthy)参与IBM资讯研究部的工作,研究符号运算及应用需求。可是,IBM旗下的Fortran表处理语言却未能支援符号运算的递归、条件表达式、动态存储分配及隐式回收等功能。约翰·麦卡锡于1958年秋季回到麻省理工学院后,和Marvin Minsky组成了人工智能项目。开展一个表处理软件系统来实现McCarthy提出建议采纳者程序的工作,尔后推动了表处理语言LISP的诞生。
  • 来源:LISP名称源自列表处理(LISt Processing)的英语缩写,由来自麻省理工学院的人工智能研究先驱约翰·麦卡锡(John McCarthy)在1958年基于λ演算所创造,采用抽象数据列表与递归作符号演算来衍生人工智能。

二、Lisp发展历程

  • 1960年4月:麦卡锡以《递回函数的符号表达式以及由机器运算的方式,第一部》为题,于ACM通讯上发表LISP设置。麦卡锡的学生Steve Russell根据该论文,以IBM 704于麻省理工学院的计算机运算中心成功执行了第一版的LISP。
  • 1962年:麦卡锡及人工智能小组按LISP 1的编译基础上改良出LISP 1.5版本。
  • 1969年9月:史丹福大学人工智能实验室的Lynn Quam与Whitfield Diffie推出的Stanford LISP 1.6广泛地被应用于使用TOPS-10系统的PDP-10计算机系中。可是,Stanford LISP 1.6版本自麻省理工智能项目更新LISP 1.5成MACLISP及BBN科技公司推出的InterLisp成功后,渐被弃置。
  • 1960代末至1980年初:各种更新LISP版本涌现,有源自加利福尼亚大学伯克利分校的Franz Lisp、在AutoCAD运行的AutoLISP前身XLISP、犹他大学开展的Standard Lisp及Portable Standard Lisp、专属于Lisp机器上运行的ZetaLisp、源自法国国家信息与自动化研究所的LeLisp、以及MIT人工智能实验室的Gerald Sussman与Guy Steele所开发的Scheme等。
  • 1984年:改良自MacLisp、集各版本大成、跨平台、且被目为事实标准的Common Lisp诞生。至1994年,美国国家标准学会(ANSI)对Common Lisp语言进行了标准化。自稳定运行的Common Lisp出现起,再有各机构按各自所需而开展后续Lisp,包括1990年来自欧洲用户的EuLisp、运行于Java虚拟机的Clojure、受到Maclisp影响而创的Emacs Lisp、以及自由开源来自卡内基·梅隆大学的CMUCL、还有IsLisp,Racket,ACL2等蓬勃涌现。
  • 2000年起:LISP共享者合力支援的自由开源社区逐渐形成,致力于LISP后续发展。
  • 2002年10月:第一届国际LISP会议于美国旧金山开展,其后LISP大会不定期于全球各地举行,包括2014年在加拿大蒙特利尔大学以移动概念作主题的会议

三、Lisp语言特点

  • LISP为函数式程序设计语言,所有运算都能以函数作用于参数的方式来实现。
  • LISP没有命令式语言程序中常见赋值语句和变量,重复的过程可以使用递归的函数调用来表示,并不需要使用循环模式。
  • LISP是古老的函数语言、弱类型、动态推断,其代码本身就是各种列表。每一个表项均可以储存任何类型的数据如数字、函数、符号或一个子表等,在编码时,可以随时操作以更新列表。
  • LISP核心的操作符只有7个操作符:quote、atom、eq、car、cdr、cons、cond。前三者quote、atom、eq用于符号的推断;car、cdr、cons操纵表格;cond负责分支判断。这种简洁定义,非常接近图灵机原型的纯函数式语言,是现代语言完全无法比拟的。
  • LISP作为弱类型这优点相对缺点则是运行效率的低下。原始定义简洁的缺点使到大型开发工程变得困难,自底层到高层,自二维表查询到面向对象,使用者需要嵌入更多的函数来实现,致使LISP众多方言的衍生。

四、Lisp语言组成

  • 数据类型
    LISP只有两种数据结构,原子(atom)和表(list)。

    • 原子为标识符形式的符号或数字的字面值。
    • 表是由零个或多个表达式组成的序列。基本上,LISP程序,并不需要使用一般表处理所必需的任意插入及删除操作。
  • 语句结构
    LISP的语法是简洁的典型,程序代码与数据的形式完全相同,以圆括号为边界的表。例如,表:(A B C D)
    按数据来解释时,它是一个有4个元素的表,按代码来解释时,它是将名为A的函数作用于3个参数B、C和D。
    在指定表结构时将表的元素放在圆括号中,简单表的元素仅限原子而成的方式是:(A B C D)
    嵌套表结构亦是以圆括号来表示,例如,表:(A (B C) D (E (F G)))
    由4个元素组成。
    第1个元素是原子A,第2个是子表(B C),第3个是原子D,第4个是子表(E(F G)),它的第2个元素是子表(F G)。
  • 关键字
    LISP是一个函数式程序语言,并无关键字或保留字设置,使用者可自行再定义。

注:本节内容来源于百度百科,作为正式开始讨论AutoLisp之前的铺垫。

AutoLisp从入门到放弃(一)相关推荐

  1. AutoLisp从入门到放弃(十二)

    AutoLisp从入门到放弃(十二) 一.文件操作 1.打开文件(open) 2.读文件(read-line.read-char) 3.写文件(write-line.write-char) 4.关闭文 ...

  2. AutoLisp从入门到放弃(五)

    AutoLisp从入门到放弃(五) 一.列表(LIST) 1.列表的创建 2.操作列表常用函数 二.DXF组码 1.DXF组码文件基本结构 2.DXF组码值类型 本章将介绍通过AutoLisp代码来查 ...

  3. AutoLisp从入门到放弃(十一)

    AutoLisp从入门到放弃(十一) 一.常用字符串处理函数 1.ascii和chr函数 2.read函数 3.strcase函数 4.strcat和strlen函数 5.substr函数 6.wcm ...

  4. AutoLisp从入门到放弃(九)

    AutoLisp从入门到放弃(九) 一.等待输入相关函数 1.getangle函数 2.getcorner函数 3.getdist函数 4.getenv函数 5.getint函数 6.getorien ...

  5. AutoLisp从入门到放弃(十四)

    AutoLisp从入门到放弃(十四) AutoLisp选择集操作 AutoLisp从入门到放弃(十四) 一.ssget 1.函数说明 2.参数说明 3.代码示例 二.ssadd.ssdel 1.函数说 ...

  6. AutoLisp从入门到放弃(六)

    AutoLisp从入门到放弃(六) 一.获取图元属性信息 二.修改图元属性信息 本章主要讲解如何通过AutoLisp代码查看.修改实体的所有属性信息,即图元信息. 一.获取图元属性信息 如果你是一个C ...

  7. AutoLisp从入门到放弃(十)

    AutoLisp从入门到放弃(十) 一.角度计算(angle) 二.距离计算(distance) 三.点坐标偏移计算(polar) 四.计算两直线交点(inters) 五.获取捕捉点(osnap) 本 ...

  8. AutoLisp从入门到放弃(七)

    AutoLisp从入门到放弃(七) 一.创建图元 二.删除图元 1.command命令 2.entdel函数 本章将介绍如何在AutoLisp代码中通过直接操作实体数据库的方式来新增和删除图元. 一. ...

  9. AutoLisp从入门到放弃(八)

    AutoLisp从入门到放弃(八) 一.修改图元图层 1.新建图层 2.删除图层 3.更改实体图层 二.修改图元颜色 本章将介绍如何使用AutoLisp操作图元的图层.颜色. 一.修改图元图层 使用l ...

  10. AutoLisp从入门到放弃(十七)

    经过之前的介绍,我们基本可以了解所有Autolisp的常用函数了.但是,从一开始到现在,我们几乎很少完整的实现一个功能.所以,从这一节开始,我们将通过一系列的实际绘图实例来进一步熟悉和巩固之前学习到的 ...

最新文章

  1. poj2774 sa模版
  2. Java堆排序递归_大顶堆第二弹----堆排序(递归实现)
  3. python高级编程知识点_(转)python 高级编程技巧学习笔记
  4. tcpmp 编译 源代码分析
  5. android 短信编解码方式,中移短信cmpp协议/smpp协议 netty实现编解码
  6. 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
  7. linux任务计划cron
  8. Java学习(二)Object
  9. json字符串数组转json数组
  10. 智能陈桥五笔7.8试用编号是多少_如何设计和编写软件测试用例
  11. 自动化测试常见问题总结
  12. 基于php考试系统设计与实现研究文毕业设计(论文)学生中期检查,毕业设计(论文)中期检查报告(学生填写)...
  13. 微信小程序-音视频剪辑
  14. 慧据价值 链接未来丨第八届数据技术嘉年华大会全议程精彩呈现
  15. TypeError [ERR_INVALID_ARG_TYPE]: The “path“ argument must be of type string. Received undefined
  16. 突发!微软亚研CV大牛王井东离职,或将加入百度
  17. 计算机房灭火房间用的系数,01-机房七氟丙烷气体灭火用量设计计算(1页)-原创力文档...
  18. ACdream 1061:郭式树
  19. 最新pycharm专业版免费激活申请步骤
  20. 微信小程序(微信应用号)开发ide安装解决方法

热门文章

  1. Windows下简单使用BPG图像压缩工具进行图像压缩和解压缩(附官方编解码工具代码下载地址)
  2. 高效Android开发者必须知道的4个工具
  3. String StringBuffer StringBuilder区别与联系
  4. 中外企业文化杂志中外企业文化杂志社中外企业文化编辑部2022年第11期目录
  5. Web开发中常用的Web应用服务器
  6. 本体技术视点 | 聊聊Ontology上三种合约“交相辉映”的故事
  7. 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(中)
  8. Numpy线性代数-numpy.inner()
  9. 使用python画出近30年存款率变化图
  10. Bootstrap 图标文件glyphicons-halflings-regular.woff未找到