LISP - 變數

在LISP中,每個變數由一個'符號'表示。變數的名稱是符號的名字,並將其存儲在碼元的存儲單元。

全局變數

全局變數有永久值在整個LISP系統,並保持有效,直到指定的新值。

全局變數是使用defvar結構一般聲明。

例如:

(defvar x 234)
(write x)

當您單擊Execute按鈕,或按下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)

當單擊Execute按鈕,或按下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-expression。則返回最後一個運算式的值。

如果不包括的變數的初始值,它被分配到nil。

例子

創建一個名為main.lisp新的源代碼檔,並在其中輸入如下代碼:

(let ((x 'a)
         (y 'b)
         (z 'c))
(format t "x = ~a y = ~a z = ~a" x y z))

當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執行它,返回的結果是:

x = A y = B z = C

該編結構也有局部變數作為第一個參數,它後面是prog的主體,以及任意數量s-expressions的列表。

該編函數執行s-expressions序列的列表,並返回零,除非遇到函數調用名返回。然後函數參數計算並返回。

例子

創建一個名為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))

當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執行它,返回的結果是:

x = (A B C) y = (1 2 3) z = (P Q 10)

上一篇: LISP - 宏 下一篇: LISP - 常量