2008年1月14日月曜日

Chapter 20 The Special Operator

前説

特になし。
しかし、この章、ごつそうだ。

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 件のコメント: