list
list
結構'(rose violet daisy buttercup)
(1) 單引號表示是一個列表的開始segmentfault
(2) 列表中的元素直接使用空格隔離函數
(3) 列表中的元素包含於()
中this
"
的字符串列表" "
包含的字符串看成一個列表元素spa
運行eval
程序後的3種可能狀況:code
(1) 直接返回一個列表htm
(2) 產生error message
pdo
(3) 把列表中的第一個元素,解析爲一個執行命令,執行該列表字符串
在一個列表以前添加'
,可使得運行時候,不解析具體的表達式,只是輸出表達式的原始字符串
除了最多見的列表結構,還有以下類型
(1) 變量
變量不須要'
和()
(2) 宏
(3) 嵌套列表
嵌套列表,先執行最裏層的表達式,再依次外層執行
字節碼
vs lisp代碼
名稱 | lisp 代碼 |
字節碼 |
---|---|---|
文件後綴 | .el |
.elc |
速度比較 | 須要先解釋爲字節碼後,在執行 | 預編譯的lisp 代碼, 執行速度更快 |
首先執行內部的表達式,而後將結果看成外層表達式的參數,再次計算外部表達式
如上,首先計算(+ 3 3)
,計算結果爲6
, 看成外層函數的參數,即(+ 2 6)
,最終的計算結果爲 8
variable
一個變量由一個符號symbol
和符號綁定的值value
組成,綁定的值能夠是
值的類型 | 示例 |
---|---|
數值 | 10 |
字符串 | "such as this" |
列表 | '(spruce pine oak) |
函數定義 |
(1) 變量被看成函數名稱
若是一個列表中只有1個變量,會被解釋器解釋爲一個函數的定義
(fill-column)
如上,fill-column
會被解釋爲一個函數名稱,由於該變量沒有綁定函數,全部*backtrace*
中會出現以下的error message
(2) 缺乏函數參數
(+ 1 1)
如上,將光標放到+
後,執行C-c C-e
,解釋器將+
看成函數名稱,可是發現沒有函數參數
將產生以下錯誤