1.变量
let引入新的局部变量。
[33]> (let ((x 1) (y 2)) (+ x y))
3
defparameter创造一个全域变量。
[37]> (defparameter *ga* 123)
*GA*
[38]> *ga*
123
用 defconstant 来定义一个全域的常量
[39]> (defconstant limit 8 )
LIMIT
[40]> limit
8
检查某些符号,是否是一个全域变量或常数,用 boundp
[41]> (boundp 'limit)
T
[42]> (boundp '*ga*)
T
2.赋值
setf给全域或局域变量做赋值,如果 setf 的第一个参数是一个符号(symbol),且这个符号不是某个局部变量的名字,那么 setf 将设置这个符号为全局变量。还是使用 defparameter 显式地创建全局变量比较好。
[44]> *ga*
1
[45]> (let ((n 10)) (setf n 2) n)
2
[46]> (setf x (list 'a 'b 'c))
(A B C)
传入 setf 的第一个参数,还可以是一个表达式或一个变量名。在这种情况下,第二个参数的值被插入至第一个参数所引用 (refer)的地方。
[47]> (setf (car x) 'n)
N
[48]> x
(N B C)
[53]> (setf a 1
b 2
c 3)
3
[54]> a
1
[55]> b
2
[56]> c
3
相当于
Read more...
(setf a b)
(setf c d)
(setf e f)
3. 类型
在 Common Lisp 里,数值才有类型,而不是变量。typep判断类型。
[57]> (typep 25 'integer)
T