📅  最后修改于: 2020-11-03 07:08:07             🧑  作者: Mango
在LISP中,每个变量都用符号表示。变量的名称是符号的名称,并存储在符号的存储单元中。
全局变量在整个LISP系统中具有永久值,并且在指定新值之前一直有效。
全局变量通常使用defvar构造声明。
(defvar x 234)
(write x)
单击“执行”按钮或键入Ctrl + E时,LISP立即执行它,返回的结果为
234
由于LISP中没有变量的类型声明,因此可以使用setq构造直接为符号指定值。
->(setq x 10)
上面的表达式将值10分配给变量x。您可以使用符号本身作为表达式来引用变量。
使用符号值函数可以提取存储在符号存储位置的值。
创建名为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构造来创建。
还有另外两个结构-让我们和PROG创建局部变量。
let构造具有以下语法。
(let ((var1 val1) (var2 val2).. (varn valn)))
其中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)