Common Lisp中的apply和append

来源:互联网 发布:linux命令启动db2服务 编辑:程序博客网 时间:2024/06/15 08:04

append

Lisp中的append就是把多个list合并成一个list。如:

> (append '(a) '(b) '(c d))(A B C D)

注意:

1.append后的每一个cell都必须是list,下面这个语句则会报错

> (append 'a 'b)bad syntax for array: APPEND

2.同时,append不是嵌套的,如:

> (append '((a b) (c d)) '(e))((A B) (C D) E)


apply

前面提到append不能对嵌套的执行合并,如:

> append '((a b) (c d))((A B) (C D))

这个时候,可以使用apply

> (apply #'append '((a b) (c d)))(A B C D)

apply后紧跟的是一个函数,上面的例子中即为append。apply将append后面的list中的整个list中的每个元素作为append的参数。上面的例子就等价于:

> (append '(a b) '(c d))

当apply紧跟的函数后面多于一个cell时,等价于:

> (append function 'p1 'p2 'p3) == (append function (list* 'p1 'p2 'p3))