[xyzzy:01871] Re: 関数名の修飾について質問
- Subject: [xyzzy:01871] Re: 関数名の修飾について質問
- From: Masahito Henmi <henmi@xxxxxxxxxxxxx>
- X-mailer: Denshin 8 Go V321.2b5
大橋さん、こんにちは。
逸見 です。
≫ひとことで言うと、フォームをいつ評価するかってことです。
C言語だと maxというのがマクロですよね。
#define max(a,b) ((a>b)?a:b)
こんなん。
int foo(int x, int y)
{
return max(x, y);
}
と書いたら、
int foo(int x, int y)
{
return ((x> y) ? x : y);
}
こう書いたのと等価ですよね。
Cの入門書だとプリプロセッサがいったん展開してから、コンパイル
すると書かれていると思います。
lispだとこんなんになるんですが
---- test.l ---------
(defmacro macro-max (a b)
`(if (> ,a ,b) ,a ,b))
(defun foo (x y)
(macro-max x y))
------------------------
M-x byte-compile-fileってやったときに、
(defmacro macro-maxっていう文は、コンパイルするんでなくって
eval(インタープリタが評価する)しとかないといけない。
でないとfooのところで、コンパイル前にソースを展開できない。
だから eval-when (compile)なんです。
よくわからなかったら、3つ全部つけておけば大丈夫という説もある^^;
------------------------------------------------------------
逸見雅人 Email henmi@xxxxxxxxxxxxx
Masahito Henmi