LISP - 变量

  • 简述

    在 LISP 中,每个变量都由一个symbol. 变量的名称是符号的名称,它存储在符号的存储单元中。
  • 全局变量

    全局变量在整个 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
    
  • 局部变量

    局部变量在给定过程中定义。在函数定义中命名为 arguments 的参数也是局部变量。局部变量只能在各自的函数内访问。
    与全局变量一样,局部变量也可以使用setq构造。
    还有另外两个构造 -letprog用于创建局部变量。
    let 构造具有以下语法。
    
    (let ((var1  val1) (var2  val2).. (varn  valn))<s-expressions>)
    
    其中 var1、var2、..varn 是变量名,val1、val2、..valn 是分配给各个变量的初始值。
    什么时候let被执行,每个变量被赋予相应的值,最后s-expression被评估。返回最后计算的表达式的值。
    如果你不包括一个变量的初始值,它被分配给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)