1.映射函数
[1]> (setf l '(1 2 3))
(1 2 3)
[8]> (mapcar #'(lambda (x) (+ x 10)) l)
(11 12 13)
maplist 接受同样的参数,将列表的渐进的下一个 cdr 传入函数
[9]> (maplist #'(lambda (x) x) l)
((1 2 3) (2 3) (3))
2.树
看完这一节,才对lisp的其中一个优点有所理解。就像lisp的名字“Lisp” 起初是 “LISt Processor” 的缩写。都是列表啊。
Cons 对象可以想成是二元树, car 代表右子树,而 cdr 代表左子树。图就不传了,原图有点错误,这个比较好理解。
我们有下面的列表。
[13]> (setf x 1)
1
[15]> (and (integerp x) (zerop (mod x 2)))
NIL
[16]> (setf x 2)
2
[17]> (and (integerp x) (zerop (mod x 2)))
T
[18]> (setf x 2.0)
2.0
[19]> (and (integerp x) (zerop (mod x 2)))
NIL
用来判断x是整数,并且被2 整除,这不是函数形式,想把其中的x改成y的时候。我们将他看成整个列表进行操作。看到这里我才明白,汗。
[20]> (subst 'y 'x '(and (integerp x) (zerop (mod x 2))))
(AND (INTEGERP Y) (ZEROP (MOD Y 2)))
单引号的功能前边有介绍,但是没这样的例子,当时还是仅仅的理解为'(a b c)。
[24]> (cons 'a 'b)
(A . B)
这是一个非正规列表,称之为
[caption id="attachment_808" align="alignnone" width="96" caption="点状列表"][/caption]
。
common lisp列表操作的函数好多,大概试了,就不记录了,等以后查看文档。
上一篇: common lisp的列表(Lists),等式 (Equality)
下一篇: common lisp数组(Array)-字符字符串
0 Responses so far.