一、变量声明
用defvar函数可以声明变量,一般声明的变量如果是全局变量,可以在头尾各加*号进行区别,声明的变量没有
类型区别,变量的值有类型区别。
二、用'宏或者quote函数可以阻止编译器进行括号后面的计算,例如:
>'(+ 2 1)
(+ 2 1)
>(+ 2 1)
3
>(quote (+ 2 1))
(+ 2 1)
三、lisp语言中的变量类型树
t (顶级变量类型,后面的所有类型都是它的子类型)
sequence
list
array
vector
string
number
float
rational
integer
ratio
complex
character
symbol
structure
functon
hash-table
四、可以用typep函数检测某变量值的类型是否属实,例如:
>(setq x '(1 2 3))
(1 2 3)
>(typep x 'list)
T
>(typep x 'sequence)
T
>(typep x 't)
T
>(typep x 'hash-table)
NIL
五、在clisp等编译器中,*表示上一个表达式的值
六、format 函数
作为输出函数,第一个主值如果是t,则表示后面的输出输出到标准输出,也就是屏幕上,~A表示后面的值,~%表示
换行,例如:
>(format t "~%~%test result is ~A~%~%" (+ 2 1))
test result is 3
七、array和vector,一维数组就是矢量。
八、用let绑定变量和值,其格式为:
(let ((var1 value1)
(var2 value2)
...)
body
)
九、数组操作
1.用make-array创建数组
(make-array '(3));;创建一个包含三个元素的数组(矢量)
(make-array '(4) :initial-element "lisp is good");;创建一个包含四个元素的数组(矢量),并初始化为"lisp is good"
(setq v3 #(1 2 3 "cat catch mouse" (99 100)));;创建一个包含5个元素的矢量v3
2.用aref访问数组
(aref v3 3);;访问v3的第四个元素
3.用setf改变任何变量的值
(setf (aref v3 3) "heihei");;将v3的第四个元素改为heihei
十、用defvar创建标志(symbols)
>(defvar h "test") H >h "test" >(defvar |t| "hi");;用了||,则变量名|t|不会变为大写 |t| >|t| "hi"