メッセージ。 - Lispのマクロ

# Lispのマクロ

いまonLispを読んでるんだけど、半分ぐらいまできて思ったこと:

Lispのマクロって、コンパイラに似ている。マクロによって吐き出されたLispコードがマシン語で書かれたコードみたいに見えたというか。具体的にそう感じたのはこれ:

(let* ((#:g1 x)
       (#:g4 ar)
       (#:g3 (incf i))
       (#:g2 (aref #:g4 #:g3))
       (#:g6 lst)
       (#:g5 (car #:g6)))
  (unless (> #:g1 #:g2)
    (rotatef #:g1 #:g2))
  (unless (> #:g1 #:g5)
    (rotatef #:g1 #:g5))
  (unless (> #:g2 #:g5)
    (rotatef #:g2 #:g5))
  (setq x #:g1)
  (system:set-aref #:g2 #:g4 #:g3)
  (system:set-car #:g6 #:g5))
Lispのマクロが吐き出したLispコード

ということは、、というか、、Lispってコンパイラなんだ、とやけに腑に落ちた感じがした。

で、onLispはコンパイラの使い方を解説している本なんだ。マシン語としてのLispコードを、マクロでどうやって吐き出すか。どういう風にマクロを使うと、意図したコードを吐き出すコンパイルができるのかを解説している。

この本で解説しようとしているのは、マシン語としてのLispや、Lispマクロというコンパイラの仕組み、コンパイラができることとは何か?なんじゃないだろうか。そして、Lispがほかの言語と違う部分があるとするならそこだと指摘しているのではないか。まだ途中まで流し読みしただけだけど、そういうことが書かれている気がした。
2010-07-08 09:51:03 / ふじさわ / Comment: 0 / Trackback: 0

Comment

コメント投稿機能は無効化されています。

Trackback

TrackBack投稿機能は無効化されています。