//变量
//引入变量:变量作用域括号内
(let ((x 10) (y 20) z)
...)
引入变量列表中的变量
(let* ((x 10)
(y (+ x 10))
...)
//全局变量
之前有没有值都可以赋值
(defparameter *count*变量名0值"doc描述")
变量未定以才可以赋值,也可以不给定值
(defvar *count*变量名 0值 "doc描述")
//常量
(defconstant a常量名10值)
//赋值
(setf place保存值的位置 value值)
递增
(incf x)——(setf x (+ x 1))
(incf x 10)——(setf x (+ x 10))
递减
(decf x)——(setf x (- x 1))
位置间轮换值
(rotatef a b)
向左移动赋值a=b,b=20
(shiftf a b 20)
//宏
//if
(ifcondition条件 then-form满足条件执行[else-form]不满足条件执行)
//when当满足条件执行,unless当不满足条件执行
(whencondition条件
执行1
执行2)
定义宏
(defmacro my-when (condition &rest body)
`(if ,condition (progn ,@body)))
(defmacro my-unless (condition &rest body)
`(if (not ,condition) (progn ,@body)))
progn操作符:逐个执行后面的语句。
//cond多重分支
(cond
(test-1条件form*执行体)
...
(test-N form*))
可以用t代表if中的else分支
(cond
(a (do-x))
(b (do-y))
(t (do-z)))
//and or是宏,not是函数
//dolist循环列表操作
(dolist (var存储每个值的变量 list-form列表)
body-form*循环体)
循环打印
(dolist (x '(1 2 3)) (print x))
列表结束前中断,用return
(dolist (x '(1 2 3)) (print x) (if (evenp x) (return)))
//dotimes循环计数,用return中断
(dotimes (var变量 count-form循环次数)
body-form*循环体)
CL-USER> (dotimes (i 2) (print i))
0
1
NIL
//do循环允许定义任意数量变量,变量改变方式可控,可以定义终止条件。
变量列表也可为空,但是必须保留括号。
(do (variable-definition*变量定义)
(end-test-form结束判断 result-form*返回结果)
statement*)
variable-definition变量定义形式
(var变量名 init-form初始值 step-form步长)
CL-USER> (do ((i 0 (1+ i)))
((>= i 2))
(print i))
0
1
NIL
其中(1+ n)等同于(+ 1 n)
//loop
简单形式:无限循环,通过return结束
(loop
body-form*循环体)
扩展形式
构建列表
CL-USER> (loop for i from 1 to 10 collecting i)
(1 2 3 4 5 6 7 8 9 10)
计算平方数求和
CL-USER> (loop for x from 1 to 10 summing (expt x 2))
385
统计字符串中元音字母个数
CL-USER> (loop for x across "the quitck brown fox jumps over the lazy dog"
counting (find x "aeiou"))
11
计算第11个斐波那契数
CL-USER> (loop for i below 10
and a = 0 then b
and b = 1 then (+ b a)
finally (return a))
55