(print "Hello World")
,用小括號 ()
產生一個 List,List 的第一個單元一定要是一個函數,例如 (1 2 3)
會產生 (invalid function 1) 的訊息,因為 1 不是函數(print "Hello World")
印出結果並返回結果(message "Hello World")
印出結果並加入 Message 緩衝區(format "Hello %s" "World")
類似 C 語言的 printf
可以加參數(list 1 2 3)
產生 (1 2 3) 的清單 (List),清單裡可以有各種類別,例如 (list 'my (+ 1 1) "sons")
產生 (my 2 "sons")
(quote (1 2 3))
也會產生 (1 2 3) 的清單,這樣的語法因為常用,所以可以簡寫為 '(1 2 3)
(list 1 (+ 2 3) 4)
會產生 (1 5 4) 而 (quote (1 (+ 2 3) 4))
則是 (1 (+ 2 3) 4)
(car '(1 2 3))
會回 1,而 (cdr '(1 2 3))
會回 (2 3)
(cadr '(1 2 3))
會產生 2,先計算 (cdr '(1 2 3))
得到 (2 3) 再用 (car '(2 3))
得到 2
全域變數
(defvar my/test1 "Hello World")
來定義全域變數(setq my/test2 "Hello World")
來定義,但不可以用 (set my/test3 "Hello World")
,因為當 elisp 求 my/test3 的值時會發生 void variable 變數未定義的錯誤,這時可以用 (set 'my/test3 "Hello World")
其實跟 (setq my/test3 "Hello World")
是一樣的 (defvar my/test "Hello World"
"這是一個測試用的變數")
當你用 Ctrl-h v 來看這個變數時,會同時有文件
至於區域變數的部分,留待再談函數時,再來解釋
為了不要讓文章太長,我們就此打住,接下來的函數及流程的部分,留待下一篇再來討論
簡報的部分,請至 我的部落格