社内勉強会の事前準備として下記を短くまとめてみました.
- 評価はフォーム(スペシャルフォーム,マクロを除く)を元に値を返す.
- 文字列,数字,etc なリテラルは自分自身の値を返す.
- シンボルはあちこち探して解決を試みる.見つからなければエラー
- シンボルにメタデータがある場合,コンパイラーが使うかもしれないが戻り値には使われない.
- vector, set, mapには評価された後の値が入る.
- 空のリストを評価すると空のリストになる.
- 空でないフォームは他のスペシャルフォーム,マクロ,関数に対する呼び出しとして扱われる.
- スペシャルフォームはClojureの言語に組み込まれているフォーム.
- destructuringも実はスペシャルフォームという発見があった
- マクロは評価の前に引数のフォームに対して操作を行う.
- スペシャルフォーム,マクロでないフォームは関数呼び出しとして扱う.
- (演算子 引数...)を左から右に評価した後,IFn型にキャストしinvoke()メソッドを呼び出す.
- 記載のないものは自分自身を返す.
- (eval ...)で上記の仕様を実感できる.
全体として序文に下記が書いてあったが意味するところがわからなかったので深く調べて見ようと思う.
If an expression needs to be compiled, it will be. There is no separate compilation step, nor any need to worry that a function you have defined is being interpreted. Clojure has no interpreter.
また,
http://clojure.org/reference/repl_and_main
も読んだ.
- *1 *2 *3でREPL上で1回前,2回前,3回前の評価結果を取得できる,
- *e で前回発生した例外のインスタンスを取得できる.
- ソケットサーバーでREPLを立ち上げることができる
- 動いているシステムをアドホックに修正できる.
- REPLのname space用の便利な関数がある.(doc等)