LISP语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
❖ 用LISP语言编程时,程序员完全不必考虑存储 分配问题。程序中定义的函数、数据和表都能 在程序运行时,由LISP自动提供。对不再需要 的数据,LISP自动释放其占用的存储区。
(5)语法简单
❖ LISP的语法极其简单,对变量和数据不需要事 先定义和说明类型。
❖ LISP的基本语法是函数定义和函数调用。
3.表处理函数 (1)取表部分内容的函数
3) 函数car和cdr可对一个表连续作用, 例: (car (cdr (cdr (cdr ‘(a b c d e f)))))可表示为
(cadddr ’(a b c d e f))返回值为d。
4) first函数等同于car函数。
3.表处理函数 (1)取表部分内容的函数
例:
(values (* 2 3) (+ 4 5))返回值6 9 (values ‘(a b) ‘(a b))返回值(a b)(a b)
3.表处理函数 (1)取表部分内容的函数 1) car函数取表的第一个元素, 例: (car ‘(a b c)) 返回值为a 2) cdr函数取表中除掉第一个元素的余下表, 例: (cdr ‘(a b c)) 返回值为(b c)
(/ a 2 2) 返回值为2.5。
(2)超越函数
主ห้องสมุดไป่ตู้的函数有:
1) (exp n)en
2) (exp b n)bn
3) (log a b) logba 4) (sqrt a) a
若缺省b,则返回值log10a 5) (abs n)|n|
6) (signum n)-1,0,1
若n<0,则返回值为-1;若n=0,则返回值为0; 若n>0,则返回值为1。
第2个元素是一个表,则把第一个元素加到第二个 元素的表头。
❖ 表和原子是LISP的主要对象。 ❖ 表可以递归定义。 ❖ 表中元素的个数称为表的长度。
❖ 原子和表称为LISP的符号表达式。LISP的符号表 达式采用前缀表示形式,即表中第一个元素是函 数符号名,其余元素是这个函数要求的运算或处 理的元素。
例,符号表达式 (setq y (* 2 3 4))
❖ LISP中的串是用双引号引起来的字符串,串中可 以包含空串。LISP中的文件名用串表示。
变量赋的值可以是一个数、一个符号表达 式、一个表或另一个变元。setq函数可以多 个变元依序赋值。
例: (setq x ‘(1 2) y x)。
赋值结果,变元x、y的值都是(1 2)。
2.求值与赋值运算
(3)求值函数
LISP有多个求值函数。函数values返回其后各变元 的值,函数values-list返回其后一个表的各元素。
LISP(LISt Processor)
❖ John McCathy(现供职于Standford)于1958年在麻 省理工学院(MIT)提出了LISP语言的基本思想; 1960年发表了设计LISP语言的文章;70年代LISP 的专用计算机产生;80年代,LISP语言及其应用 迅速发展,如今大约有十多种LISP语言。
❖ 1984年推出的Common LISP成为LISP的标准语言。 在PC机上使用的GCLISP、XLISP(扩展了面向对 象的成分),Auto CAD中的Auto LISP都是 Common LISP的子集。
❖ LISP语言不仅在专家系统和CAD领域有广泛的应 用,在符号代数、定理证明、机器人规划等领域 也有广泛的应用。
(3)数的逻辑运算函数
数的逻辑运算函数可把指定的多个十进值先转换 成二进制数,然后把多个二进制数的对应位进行 逻辑运算,把运算结果再转换成十进制整数作为 函数返回值。
❖ 函数有:逻辑或(logior)、逻辑异或(logxor)、 逻辑与(logand)、逻辑非(lognot)等。
例: (logior 25 30) 返回值31
(logxor 25 15) 返回值22
(logand 30 42) 返回值10
2.求值与赋值运算
(1)禁止求值函数 禁止函数quote,对指定的表,说明表中
元素都是数。
例:(quote(a b c))
返回值是表(a b c)quote函数的缩写形式
为“'”。
(2)赋值函数
赋值函数setq用于对变量赋值,对一个
2. LISP的符号表达式
❖ LISP的符号类似其它程序设计语言中的变量, 一个符号名是字母开头不含规定的特殊字符的 字符串,可以把计算或处理后的结果赋给一个 符号。
❖ 数和符号都称为原子,它们是LISP中不能再分 割的对象。
❖ 若干个数或符号用括号括起来就构成一个表, 表中的原素用空格分开。
❖ 没有元素的表称为空表,空表可用() 表示,也可以表示为nil,空表也是原子。
§1 LISP语言的特点与表达式
1. LISP语言的特点
❖ LISP语言是一种基于表结构的函数型语言。
(1)函数性 ❖ 函数语言的基本特点:
用函数定义和函数调用构成程序。用传统 语言(FORTRAN、PASAL、C)编程时,程序 员要规定求解的顺序。LISP编程不考虑程序执 行顺序的细节。
(2)递归性
S-表达式
原子
表
数
符号
定点数 浮点数
LISP各对象间的关系
§2 LISP语言的基本函数
1.数值运算函数 ❖ 数值运算函数对指定的数进行运算,
函数返回值是数值运算的结果。
(1)算术运算函数 算术运算函数有: 加函数+、减函数-、乘函数*、除函数/、 加1函数1+、减1函数1-等。 例: (setq a 10)
❖ 递归函数是指:
在函数的定义中调用了这个函数本身。递归 定义的方法使程序简明、优美。
(3)数据和程序的一致性
❖ LISP的一段程序是用户定义的函数。函数执行后 的输出数据称为这个函数的返回值。一个函数被 其他函数调用,就调用这个函数的返回值。函数 与这个函数的返回值是一致的。
(4)自动进行存储分配
5) second函数等同于cadr函数。 6) third函数等同于caddr函数。 7) rest函数等同于cdr函数。 8) nth函数返回表中指定的那一个元素。
例: (nth 3 ‘(a b c d)) 返回值为d.
3.表处理函数
(2)构造表的函数
1)cons函数把指定的两个元素构造一个表,如果
(5)语法简单
❖ LISP的语法极其简单,对变量和数据不需要事 先定义和说明类型。
❖ LISP的基本语法是函数定义和函数调用。
3.表处理函数 (1)取表部分内容的函数
3) 函数car和cdr可对一个表连续作用, 例: (car (cdr (cdr (cdr ‘(a b c d e f)))))可表示为
(cadddr ’(a b c d e f))返回值为d。
4) first函数等同于car函数。
3.表处理函数 (1)取表部分内容的函数
例:
(values (* 2 3) (+ 4 5))返回值6 9 (values ‘(a b) ‘(a b))返回值(a b)(a b)
3.表处理函数 (1)取表部分内容的函数 1) car函数取表的第一个元素, 例: (car ‘(a b c)) 返回值为a 2) cdr函数取表中除掉第一个元素的余下表, 例: (cdr ‘(a b c)) 返回值为(b c)
(/ a 2 2) 返回值为2.5。
(2)超越函数
主ห้องสมุดไป่ตู้的函数有:
1) (exp n)en
2) (exp b n)bn
3) (log a b) logba 4) (sqrt a) a
若缺省b,则返回值log10a 5) (abs n)|n|
6) (signum n)-1,0,1
若n<0,则返回值为-1;若n=0,则返回值为0; 若n>0,则返回值为1。
第2个元素是一个表,则把第一个元素加到第二个 元素的表头。
❖ 表和原子是LISP的主要对象。 ❖ 表可以递归定义。 ❖ 表中元素的个数称为表的长度。
❖ 原子和表称为LISP的符号表达式。LISP的符号表 达式采用前缀表示形式,即表中第一个元素是函 数符号名,其余元素是这个函数要求的运算或处 理的元素。
例,符号表达式 (setq y (* 2 3 4))
❖ LISP中的串是用双引号引起来的字符串,串中可 以包含空串。LISP中的文件名用串表示。
变量赋的值可以是一个数、一个符号表达 式、一个表或另一个变元。setq函数可以多 个变元依序赋值。
例: (setq x ‘(1 2) y x)。
赋值结果,变元x、y的值都是(1 2)。
2.求值与赋值运算
(3)求值函数
LISP有多个求值函数。函数values返回其后各变元 的值,函数values-list返回其后一个表的各元素。
LISP(LISt Processor)
❖ John McCathy(现供职于Standford)于1958年在麻 省理工学院(MIT)提出了LISP语言的基本思想; 1960年发表了设计LISP语言的文章;70年代LISP 的专用计算机产生;80年代,LISP语言及其应用 迅速发展,如今大约有十多种LISP语言。
❖ 1984年推出的Common LISP成为LISP的标准语言。 在PC机上使用的GCLISP、XLISP(扩展了面向对 象的成分),Auto CAD中的Auto LISP都是 Common LISP的子集。
❖ LISP语言不仅在专家系统和CAD领域有广泛的应 用,在符号代数、定理证明、机器人规划等领域 也有广泛的应用。
(3)数的逻辑运算函数
数的逻辑运算函数可把指定的多个十进值先转换 成二进制数,然后把多个二进制数的对应位进行 逻辑运算,把运算结果再转换成十进制整数作为 函数返回值。
❖ 函数有:逻辑或(logior)、逻辑异或(logxor)、 逻辑与(logand)、逻辑非(lognot)等。
例: (logior 25 30) 返回值31
(logxor 25 15) 返回值22
(logand 30 42) 返回值10
2.求值与赋值运算
(1)禁止求值函数 禁止函数quote,对指定的表,说明表中
元素都是数。
例:(quote(a b c))
返回值是表(a b c)quote函数的缩写形式
为“'”。
(2)赋值函数
赋值函数setq用于对变量赋值,对一个
2. LISP的符号表达式
❖ LISP的符号类似其它程序设计语言中的变量, 一个符号名是字母开头不含规定的特殊字符的 字符串,可以把计算或处理后的结果赋给一个 符号。
❖ 数和符号都称为原子,它们是LISP中不能再分 割的对象。
❖ 若干个数或符号用括号括起来就构成一个表, 表中的原素用空格分开。
❖ 没有元素的表称为空表,空表可用() 表示,也可以表示为nil,空表也是原子。
§1 LISP语言的特点与表达式
1. LISP语言的特点
❖ LISP语言是一种基于表结构的函数型语言。
(1)函数性 ❖ 函数语言的基本特点:
用函数定义和函数调用构成程序。用传统 语言(FORTRAN、PASAL、C)编程时,程序 员要规定求解的顺序。LISP编程不考虑程序执 行顺序的细节。
(2)递归性
S-表达式
原子
表
数
符号
定点数 浮点数
LISP各对象间的关系
§2 LISP语言的基本函数
1.数值运算函数 ❖ 数值运算函数对指定的数进行运算,
函数返回值是数值运算的结果。
(1)算术运算函数 算术运算函数有: 加函数+、减函数-、乘函数*、除函数/、 加1函数1+、减1函数1-等。 例: (setq a 10)
❖ 递归函数是指:
在函数的定义中调用了这个函数本身。递归 定义的方法使程序简明、优美。
(3)数据和程序的一致性
❖ LISP的一段程序是用户定义的函数。函数执行后 的输出数据称为这个函数的返回值。一个函数被 其他函数调用,就调用这个函数的返回值。函数 与这个函数的返回值是一致的。
(4)自动进行存储分配
5) second函数等同于cadr函数。 6) third函数等同于caddr函数。 7) rest函数等同于cdr函数。 8) nth函数返回表中指定的那一个元素。
例: (nth 3 ‘(a b c d)) 返回值为d.
3.表处理函数
(2)构造表的函数
1)cons函数把指定的两个元素构造一个表,如果