lisp编程笔记

默认分类 · 2009-01-04

一、变量声明

用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"
lisp 编程
Theme Jasmine by Kent Liao