AutoLisp从入门到放弃(一)

Lisp是一种由约翰·麦卡锡在1958年创建的函数式编程语言,主要用于人工智能领域。它以其列表处理能力、递归函数和简洁的核心操作符闻名。Lisp经历了多个版本的发展,包括LISP1.5、MACLISP、CommonLisp等,形成了丰富的方言生态系统。尽管其动态类型的特性可能导致效率问题,但Lisp的灵活性和强大的符号处理能力使其在编程史上占有重要地位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、认识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之前的铺垫。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值