特になし。
しかし、この章、ごつそうだ。
Controlling Evaluation
1. QUOTE
2. IF
3. PROGN
特になし。
Manipulating the Lexical Environment
4. LET
5. LET*
6. SETQ
7. FLET
8. LABELS
9. MACROLET
10. SYMBOL-MACROLET
11. FUNCTION
ためしにWITH-SLOTSを展開してみると、、、
CL-USER> (macroexpand-1 '(with-slots (x y z) foo (list x y z)))
(LET ((#:G163 FOO))
(DECLARE (SYSTEM::VARIABLE-REBINDING FOO #:G163))
#:G163
(LIST (SLOT-VALUE #:G163 'X) (SLOT-VALUE #:G163 'Y)
(SLOT-VALUE #:G163 'Z)))
T
CL-USER>
本と違う。SYMBOL-MACROLETまで展開されてるのかな。ま、mightだし、いいや。
SYMBOL-MACROLETの説明がよくわからん。HypeSpecのはわかりやすい。(HyperSpec)
Local Flow of Control
12. BLOCK
13. RETURN-FROM
14. TAGBODY
15. GO
特になし。
Unwinding the Stack
16. CATCH
17. THROW
18. UNWIND-PROTECT
特になし。
Multiple Values
19. MULTIPLE-VALUE-CALL
誰が何する人か整理。
- VALUES : function : 複数の値を引数に取り、多値として返す。
- VALUES-LIST : function : 単一のリストを引数に取り、多値として返す。
- MULTIPLE-VALUE-CALL : special operator : subformをそれぞれ全て評価した上で、多値含めてそれらを全部引数としてfunctionに渡す。
- MULTIPLE-VALUE-BIND : macro : 多値を変数に格納する。
- MULTIPLE-VALUE-LIST : macro : 多値をリストにする。
EVAL-WHEN
20. EVAL-WHEN
頭にすっと入らない。思うに、英語力が低いからすっと入らないだけで、この本の記述自体は簡明なのだろう。
いずれにしても、メモを取りながら。。。
- LOADは、ファイルをloadして、それのtop-level formsを全て評価する。
- COMPILE-FILEは、a source fileをa FASL fileにコンパイルする。
- (load "foo.lisp")と(load "foo.fasl")は等価である。
- LOADは、ファイルの前の方にあるformsは、後ろの方のformsの評価に影響を与える。
- COMPILE-FILEは、通常は、formsを評価しない。評価が発生するのは、FASLがLOADされるときである。
- しかし、一部のformsは、COMPILE-FILEの処理のときに評価しないと、(load "foo.lisp")と(load "foo.fasl")の等価性を確立できない。
- それは、例えば、IN-PACKAGEやDEFMACROである。
- EVAL-WHENを使うと、specific bits of codeが何時評価されるかを指定できる。
Other Special Operators
21. LOCALLY
22. THE
23. LOAD-TIME-VALUE
24. PROGV
一個足りない。。。と思ったら脚注に。
25. MULTIPLE-VALUE-PROG1
特になし。
0 件のコメント:
コメントを投稿