Lisp常用函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Lisp常用函数
Lisp语法及变量皆不分大小写(case insensitive)。
NIL
空串行,相当于'()。另外真伪值表示时,T表真,NIL表伪。只要是任何不是NIL (空串行)的值,真伪值都表示真。
QUOTE
CODE:
(QBaidu NhomakorabeaOTE参数)
将参数直接传回,不做任何评估动作。可用' (单引号)取代
SETQ, SETF, LET
CODE:
(SETQ参数1参数2)
(SETF参数1参数2)
(LET ((变量1名称变量1的值)
(变量2名称变量2的值)
........
)
变数1,2...的作用范围,既程序执行叙述
)
SETQ, SETF将参数1的值连结至参数2。LET只有在作用范围内有效。
注:SetQ=> set quote;SetF=> set form
(LISTP参数)
(NUMBERP参数)
(ZEROP参数)
判断参数是否为atom(原子), list(串行), number(数字), zero(0),ZEROP的参数必须为数字。
LENGTH
CODE:
(LENGTH参数串行)
计算参数串行内的元素有几个。
REVERSE
CODE:
(REVERSE参数串行)
CODE:
(LIST参数1 ........ )
将若干参数,当作是新串行的元素,形成新串行。
注:APPEND除了最后一个之外的参数皆需为串行,而LIST不用。
NULL
CODE:
(NULL参数)
判断参数是否为空串行(NIL)。
ATOM, LISTP, NUMBERP, ZEROP
CODE:
(ATOM参数)
注:全域变数习惯用两个*把变量名称包起来,例如*globe-variable*
CAR, CDR
CODE:
(CAR串行参数)
(CDR串行参数)
CAR取得参数串行的第一个元素;CDR取得扣掉第一个元素之后的新串行。
CONS
CODE:
(CONS参数1参数串行2)
把参数1加到参数串行2的第一个元素,产生出新的串行。
(to be continued... )
IF, COND
CODE:
(IF测试条件测试条件为真的执行叙述测试条件为伪的执行叙述)
(COND ((测试条件1) (待执行叙述1))
((测试条件2) (待执行叙述2))
......
((测试条件n) (待执行叙述n))
)
由测试条件1~测试条件n逐一检查,发现的第一个满足的测试条件k,就执行之后的待执行叙述k,执行之后,即终止测试,并跳出此COND叙述。
将参数串行内的元素顺序反过来,切记,它只会反转第一层的元素。
EQUAL
[Copy to clipboard] [ - ]
CODE:
(EQUAL参数1参数2)
比较两参数是否相等。
=, >, <, >=, <=
CODE:
(=参数1参数2)
(>参数1参数2)
(<参数1参数2)
(>=参数1参数2)
(<=参数1参数2)
对任一串行A而言,(CONS (CAR A) (CDR A))即为A。
注:如果第二个参数不是串行,则会产生出点对,故少用。
APPEND
CODE:
(APPEND参数串行1参数串行2 ........ )
合并若干参数串行,形成新的串行。
注:如果最后一个参数不是串行,也会形成尾巴是带点的串行,故少用。
LIST
注:下面使用方法,类似一般语言的if-then-else使用方式
CODE:
(COND ((测试条件1) (待执行叙述1))
( T (待执行叙述2))
)
DEFUN
CODE:
(DEFUN函数名称(参数1参数2 ... )
(执行叙述1)
(执行叙述2)
.........
)
函数定义啦!如果有需要递归定义的话,请直接使用函数名称。
范例:
CODE:
(DEFUN factorial (N)
(COND ((= N 0) 1)
(T (* N (factorial (- N 1))))
)
)
使用时候:
(factorial 5)
传回结果:
120
功用正如你所想,传回值是T或是NIL。
NOT, AND, OR
CODE:
(NOT参数)
(AND参数1参数2 ...... )
(OR参数1参数2 ...... )
功用正如你所想。AND由左至右搜寻是否有NIL,碰到第一个满足的元素时,就停止搜寻,然后传回NIL,不然等搜寻到最后一个之后,最后一个参数就会被传回来啦。同理,OR会搜寻第一个非NIL的元素,然后就停止搜寻,把那个元素当做传回值啦。
Lisp语法及变量皆不分大小写(case insensitive)。
NIL
空串行,相当于'()。另外真伪值表示时,T表真,NIL表伪。只要是任何不是NIL (空串行)的值,真伪值都表示真。
QUOTE
CODE:
(QBaidu NhomakorabeaOTE参数)
将参数直接传回,不做任何评估动作。可用' (单引号)取代
SETQ, SETF, LET
CODE:
(SETQ参数1参数2)
(SETF参数1参数2)
(LET ((变量1名称变量1的值)
(变量2名称变量2的值)
........
)
变数1,2...的作用范围,既程序执行叙述
)
SETQ, SETF将参数1的值连结至参数2。LET只有在作用范围内有效。
注:SetQ=> set quote;SetF=> set form
(LISTP参数)
(NUMBERP参数)
(ZEROP参数)
判断参数是否为atom(原子), list(串行), number(数字), zero(0),ZEROP的参数必须为数字。
LENGTH
CODE:
(LENGTH参数串行)
计算参数串行内的元素有几个。
REVERSE
CODE:
(REVERSE参数串行)
CODE:
(LIST参数1 ........ )
将若干参数,当作是新串行的元素,形成新串行。
注:APPEND除了最后一个之外的参数皆需为串行,而LIST不用。
NULL
CODE:
(NULL参数)
判断参数是否为空串行(NIL)。
ATOM, LISTP, NUMBERP, ZEROP
CODE:
(ATOM参数)
注:全域变数习惯用两个*把变量名称包起来,例如*globe-variable*
CAR, CDR
CODE:
(CAR串行参数)
(CDR串行参数)
CAR取得参数串行的第一个元素;CDR取得扣掉第一个元素之后的新串行。
CONS
CODE:
(CONS参数1参数串行2)
把参数1加到参数串行2的第一个元素,产生出新的串行。
(to be continued... )
IF, COND
CODE:
(IF测试条件测试条件为真的执行叙述测试条件为伪的执行叙述)
(COND ((测试条件1) (待执行叙述1))
((测试条件2) (待执行叙述2))
......
((测试条件n) (待执行叙述n))
)
由测试条件1~测试条件n逐一检查,发现的第一个满足的测试条件k,就执行之后的待执行叙述k,执行之后,即终止测试,并跳出此COND叙述。
将参数串行内的元素顺序反过来,切记,它只会反转第一层的元素。
EQUAL
[Copy to clipboard] [ - ]
CODE:
(EQUAL参数1参数2)
比较两参数是否相等。
=, >, <, >=, <=
CODE:
(=参数1参数2)
(>参数1参数2)
(<参数1参数2)
(>=参数1参数2)
(<=参数1参数2)
对任一串行A而言,(CONS (CAR A) (CDR A))即为A。
注:如果第二个参数不是串行,则会产生出点对,故少用。
APPEND
CODE:
(APPEND参数串行1参数串行2 ........ )
合并若干参数串行,形成新的串行。
注:如果最后一个参数不是串行,也会形成尾巴是带点的串行,故少用。
LIST
注:下面使用方法,类似一般语言的if-then-else使用方式
CODE:
(COND ((测试条件1) (待执行叙述1))
( T (待执行叙述2))
)
DEFUN
CODE:
(DEFUN函数名称(参数1参数2 ... )
(执行叙述1)
(执行叙述2)
.........
)
函数定义啦!如果有需要递归定义的话,请直接使用函数名称。
范例:
CODE:
(DEFUN factorial (N)
(COND ((= N 0) 1)
(T (* N (factorial (- N 1))))
)
)
使用时候:
(factorial 5)
传回结果:
120
功用正如你所想,传回值是T或是NIL。
NOT, AND, OR
CODE:
(NOT参数)
(AND参数1参数2 ...... )
(OR参数1参数2 ...... )
功用正如你所想。AND由左至右搜寻是否有NIL,碰到第一个满足的元素时,就停止搜寻,然后传回NIL,不然等搜寻到最后一个之后,最后一个参数就会被传回来啦。同理,OR会搜寻第一个非NIL的元素,然后就停止搜寻,把那个元素当做传回值啦。