作者: Bruce.
日時: 2009/3/05(03:10)
Bruce. です。

例によって日本語版のほうはちょっと怪しいですね。

機械伯爵 さんは書きました (2009/03/04 21:12):
>  機械す。
> 
>> ウィキペディアに書いてあるので良いのでは?と思うんですけど...
>> 曰く『プログラム中の文字列を、あらかじめ定義された規則に従って置換すること』
>> 転じて、『アプリケーションソフトウェア上の作業を自動化する機能や
>> プログラム言語(マクロ言語)のこと』
> 
>  ええ、そうですよね。
>  とすると同じウィキペディアの、『LISPのマクロ』の項にある
> 『LISPのマクロは受け取ったS式を別のS式に変換して返す関数として定義される。』
>  という、LISPでのマクロの定義が特別、と見ていいのでしょうか?
>  実際、この定義だけかなり他から浮いていて、それが私の中で混乱したもともとの理由なんですけど。
>  LISPが特別、というだけの話なら、単に私が混乱していただけなので、話は簡単ですが。

LISPのマクロ

LISPのマクロは受け取ったS式を別のS式に変換して返す関数として定義される。したがってマクロはそれ自体チューリング完全な言語
であり、プログラムが解釈される前に自由に構文木を操作できる。これは実質的に文法構造の自由な拡張機能を(S式という範囲で)与
える能力である。

LISPでのマクロについては以下の書籍が参考になる。

http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%AF%E3%83%AD_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E7%94%A8%E8%AA%9E)#LISP.E3.81.AE.E3.83.9E.E3.82.AF.E3.83.AD


Macro (computer science) - Wikipedia, the free encyclopedia
"Lisp macros

Lisp's uniform, parenthesized syntax works especially well with macros. Languages of the Lisp family, such as Common
Lisp and Scheme, have powerful macro systems because the syntax is simple enough to be parsed easily. Lisp macros
transform the program structure itself, with the full language available to express such transformations. Common Lisp
and Scheme differ in their macro systems: Scheme's is based on pattern matching, while Common Lisp macros are functions
that explicitly construct sections of the program.

Being able to choose the order of evaluation (see lazy evaluation and non-strict functions) enables the creation of new
syntactic constructs (e.g. control structures) indistinguishable from those built into the language. For instance, in a
Lisp dialect that has cond but lacks if, it is possible to define the latter in terms of the former using macros.

Macros also make it possible to define data languages which are immediately compiled into code, which means that
constructs such as state machines can be implemented in a way that is both natural and efficient.[4]"
http://en.wikipedia.org/wiki/Macro_(computer_science)

んでまあ、広い意味でマクロとはどういう物を指すのかということはやはり英語版の
記述の頭の部分で良いのではないでしょうか。

A macro (from the Greek 'μάκρο' for long or far) in computer science is a rule or pattern that specifies how a certain
input sequence (often a sequence of characters) should be mapped to an output sequence (also often a sequence of
characters) according to a defined procedure. The mapping process which instantiates a macro into a specific output
sequence is known as macro expansion.

ここは日本語版とほぼ同じ?


-- 
木村浩一
  I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?
  mail kbk [at] kt.rim.or.jp
        web  www.kt.rim.or.jp/~kbk/zakkicho/
             homepage3.nifty.com/farstar/