-
macroexpand hook
- 第一引数expansion function
- 第二引数マクロ全体
- 第三引数environment object
-
expansion functionを呼ぶ
- 第一引数マクロ全体
- 第二引数environment object
- 結果のformが元々のformに置き換えられて再評価される
-
Symbol
-
symbol macro
- define-symbol-macroやsymbol-macletで定義される
- macroexpand hookによって評価される
-
variable
- valueが返される
-
lexical variables
- lexical scope経由でのみ参照可能
-
dynamic variables
- ローカルで宣言
- specialでグローバルに宣言
- dynamic bindingで作成され、lexical bindingで隠れていない
-
constant variables
- defconstantで定義
-
予約されたキーワード、シンボル
- nil
- ()
- '()
- 'nil
- false
- t, pi, array-total-size-limit, ...
-
Cons
-
carがsymbol
-
special form
- carがspecial operator
- 処理フローなど特別な処理
- block, function, let, if, progn, quote, setq...
- special operatorによってどのように処理するか異なる
-
macro form
- carがmacro operator
- macro operatorからexpansion functionを取得
- macroexpand hookによって評価される
- macro formを結果のformに置き換えて再度評価
-
function form
- cdrを左から順番に評価
- 評価結果から引数を構築する
- 関数を呼び出す
- carが未定義のときはundefined-function
-
carがnot symbol
-
lambda form
- 関数名がlamda formであるfunction form
- funcallと同様に評価する
-
Self-evaluating objects
- number
- path name
- array