在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新的原始碼檔案,並在其中輸入如下程式碼: