私の日本語がカオスですいませんでした・・・。
「scheme も Common Lisp みたいに、nil が偽で空リストも偽で空リストが nil 、だと良いのになー。」「(car nil) や (car '()) が nil なのも良いなー。」と思ったのでした。なんで Scheme はそうじゃないんだろう?というのが切欠です。
Chaton の方からも転載・・・。
|
|
関数定義内にあるマクロ呼び出しは関数がコンパイルされるときに展開形に置換される. マクロを呼び出す関数がコンパイルされた後にそのマクロを再定義したらどうなるだろうか? 元々のマクロ呼び出しの形跡は残っていないので,関数内の展開形は更新されない.
applyやfuncallの第1引数としては渡せないし, 呼出側の関数が新たなローカルな束縛を生むような環境では使うべきでない.
マクロ呼び出しは,書かれた所に直接展開される.
マクロはマクロ呼び出し内の引数の評価を制御する. 評価回数は引数がマクロの展開コードのどこに置かれるかによるが, 1回でも複数回でも良いし,全く評価しないこともある.
Lispプログラムでのマクロ展開は全てプログラムがコンパイルされたときに行われ, コンパイル時に実行できるどのような計算も,実行時にプログラムを遅くすることはない.
関数は(例えばapplyに)引数として渡すことも,関数から返すことも, データ構造内に格納することもできる. マクロではそれらはどれも不可能だ. これらはマクロ呼び出しをλ式で包むことで実現できる場合がある.
マクロに興味を持つ者なら誰もが、On Lisp の一言一句を逃さず読まなければならない。
@valvallow 暗黙の block と tagbody が無いので、return や return-from や go が使えない点がホンモノと違うかも?less than a minute ago via TweenSeaoak
seaoak2003