Common Lisp 创建变量
Common Lisp 是动态类型的,类型错误会被动态的检测到。
Common Lisp 是强类型的,因为所有的类型错误都将被检测到,无法将一个对象作为其不属于的类型的实例对待。
Common Lisp 中所有的值都是对象的引用。因此,将一个变量赋予新值会改变该变量所指向的队形,而对之前引用的对象没有影响。
let操作符引入新变量
形式:(let (variable*)
body-form*)
最后一个 variable 求值被返回。
其中 * 代表可以有多个 variable。每个 variable都是变量初始化形式,省略为 nil。
例如:(let (a 1) (b 2) c)
let 内部可以重新用 let 进行绑定,其作用范围类似于c等其他语言。
变量类型
Common Lisp 支持两种变量类型,词法变量 (lexical)和动态变量(dynamic),分别对应其他语言的局部变量和全局变量创建全局变量
关键词 defvar 和 defparameter
两种形式都接受一个变量名,一个初始值以及一个可选的文档字符串。
全局变量的命名一般以 * 开头和结尾
例如:(defvar *num* 0
"the num is 0)
如果行重新定义这个变量,只要重新绑定它即可,如用 letdefvar 和 defparameter的区别
defparameter 总是将初始值赋值给变量,而 defvar 只有当变量未定义时这样做。
defvar 可以不带初始值使用,这种变量称为未绑定的 unbound定义全局变量的优势
全局变量优势在于不必到处传递他们,多种语言的标准输入输出都是用的全局变量就是处于这个原因。