LISP - 变量
在 LISP 中,每个变量都由一个符号表示。 变量的名称是符号的名称,它存储在符号的存储单元中。
全局变量
全局变量在整个 LISP 系统中具有永久值,并且在指定新值之前一直有效。
全局变量通常使用 defvar 结构声明。
例如
(defvar x 234) (write x)
当你点击执行按钮,或者输入Ctrl+E,LISP立即执行,返回结果为
234
由于 LISP 中没有变量的类型声明,因此您可以使用 setq 结构直接为符号指定值。
例如
->(setq x 10)
上面的表达式将值 10 赋给变量 x。 您可以使用符号本身作为表达式来引用变量。
symbol-value函数允许您提取存储在符号存储位置的值。
例如
创建名为 main.lisp 的新源代码文件并在其中键入以下代码。
(setq x 10) (setq y 20) (format t "x = ~2d y = ~2d ~%" x y) (setq x 100) (setq y 200) (format t "x = ~2d y = ~2d" x y)
当你点击“执行”按钮,或者输入 Ctrl+E,LISP 会立即执行并返回结果。
x = 10 y = 20 x = 100 y = 200
局部变量
局部变量是在给定过程中定义的。 在函数定义中命名为实参的形参也是局部变量。 局部变量只能在相应的函数内访问。
与全局变量一样,局部变量也可以使用 setq 结构创建。
还有另外两个结构 - let 和 prog 用于创建局部变量。
let 构造具有以下语法。
(let ((var1 val1) (var2 val2).. (varn valn))<s-expressions>)
其中 var1、var2、..varn 是变量名称,val1、val2、.. valn 是分配给各个变量的初始值。
当执行let时,每个变量都会被赋予各自的值,最后对s-表达式进行求值。 返回最后计算的表达式的值。
如果您不包含变量的初始值,则会将其分配给nil。
示例
创建名为 main.lisp 的新源代码文件并在其中键入以下代码。
(let ((x 'a) (y 'b)(z 'c)) (format t "x = ~a y = ~a z = ~a" x y z))
当你点击“执行”按钮,或者输入 Ctrl+E,LISP 会立即执行并返回结果。
x = A y = B z = C
prog 构造也将局部变量列表作为其第一个参数,后面是 prog 的主体, 和任意数量的 s 表达式。
prog函数按顺序执行s表达式列表并返回nil,除非遇到名为return的函数调用。然后是return的参数 函数被评估并返回。
示例
创建名为 main.lisp 的新源代码文件并在其中键入以下代码。
(prog ((x '(a b c))(y '(1 2 3))(z '(p q 10))) (format t "x = ~a y = ~a z = ~a" x y z))
当你点击“执行”按钮,或者输入 Ctrl+E,LISP 会立即执行并返回结果。
x = (A B C) y = (1 2 3) z = (P Q 10)