当前位置: 首页 > 文档资料 > LISP 中文教程 >

变量

优质
小牛编辑
133浏览
2023-12-01

在LISP中,每个变量由symbol 。 变量的名称是符号的名称,它存储在符号的存储单元格中。

全局变量 (Global Variables)

全局变量在整个LISP系统中具有永久值,并且在指定新值之前保持有效。

通常使用defvar构造声明全局变量。

例如 (For example)

(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

局部变量 (Local Variables)

局部变量在给定的过程中定义。 在函数定义中命名为参数的参数也是局部变量。 局部变量只能在相应的功能中访问。

与全局变量一样,也可以使用setq构造创建局部变量。

还有另外两个构造 - letprog用于创建局部变量。

let结构具有以下语法。

(let ((var1  val1) (var2  val2).. (varn  valn))<s-expressions>)

其中var1,var2,.. varn是变量名,val1,val2,.. valn是分配给各个变量的初始值。

执行let ,为每个变量分配相应的值,最后计算s-expression 。 返回最后一个表达式的值。

如果未包含变量的初始值,则将其指定为nil.

例子 (Example)

创建名为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,的主体prog,以及任意数量的s表达式。

prog函数按顺序执行s表达式列表并返回nil,除非遇到名为return.的函数调用return. 然后评估并返回return函数的参数。

例子 (Example)

创建名为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)