79/ DO
1 > (let ((x NIL));;;设变量并赋值为空
(do ((x 1 (+ x 1));;;循环规则,从1开始,每次+1。首x为容器,后x为初始值或上一次循环的x值
(y x x));;;循环规则,从x值开始,每次取x值,首x为首次循环y的取值,后x为上次循环值,从第二次循环赋值给y
((> x 5));;;此x为+1后的值,即本次循环的值
(format t "(~A ~A) " x y)));;打印格式
(1 NIL) (2 1) (3 2) (4 3) (5 4)
do*直接获得当下值
3 > (do* ((x 1 (+ x 1));;不需要初始值,本轮循环中直接获得当下值1,可直接设定局部变量x
(y x x));;;;获取本轮循环x值,为+1后的值
((> x 5))
(format t "(~A ~A) " x y))
(1 1) (2 2) (3 3) (4 4) (5 5)
NIL
3 > (dolist (x '(a b c d) 'done);;;迭代列表
(format t "~A " x))
A B C D
DONE
3 > (dotimes (x 10 x);;;;dotimes,给定某个n,将会从整数0,迭代至n-1
(format t "~A " x))
0 1 2 3 4 5 6 7 8 9
10
3 > (dotimes (x 5 );;;第三个位置可以省略,会返回nil
(format t "~A " x))
0 1 2 3 4
NIL
连乘
4 > (defun factorial (n)
(do ((j n (- j 1))
(f 1 (* j f)))
((= j 0) f)))
FACTORIAL;;;;定义函数
4 > (FACTORIAL 3);;;验证
6
80/ MAPC
4 > (mapc #'(lambda (x y);;;同时遍历多个列表
(format t "~A ~A~%" x y))
'(hip flip slip);;;总是返回mapc的第二个参数。
'(hop flop slop));;;第三个参数
HIP HOP;;遍历过程
FLIP FLOP;;遍历过程
SLIP SLOP;;遍历过程
(HIP FLIP SLIP);;;最终返回值