• ベストアンサー

LISPのマクロと他の言語のマクロの違い

LISPのマクロは強力と言われていますが、他の言語の言うマクロとはどう違うのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

ここでいう「マクロ」は一言で言うと「プログラムを生成する機能」ですね。 例えばCのマクロを例に上げますと、 #define MAX(a, b) (a) > (b) ? (a) : (b) というようなマクロを定義すると、後に MAX(10, x) と書いた際に (10) > (x) ? (10) : (x) というプログラムがコンパイル時に生成されます。 Cなどのマクロは、マクロ専用の文法があり、 マクロで書けるものにはある程度の制限が付きます。例えば、 「マクロの引数が定数の際に奇数か偶数かで『生成するプログラム』を変える」 などといった複雑なことはできません。 一方、Lispのマクロは、Lispそのもので書くことが可能で、 任意のプログラムをマクロとして書くことができます。 マクロの中で条件分岐やループなど、なんでも出来てしまいます。 これにより、コンパイル時にマクロの引数の型や値に応じて 生成するプログラムを変えることで最適化を行ったり、 新たな言語機能(と対応する文法)を追加するようなことが可能です。 例えば、昔のLispにはオブジェクト指向の機能がありませんでしたが、 マクロを使うことで、後からオブジェクト指向の機能を付け加えることができました。 また、Common Lispのオブジェクト指向の機能が独特で嫌いな人は、 マクロを使うことでJava風のオブジェクト指向の機能を追加するようなことも可能です。 極端な話、Lispの上で別の言語が作れてしまうわけです。 コンパイル時に任意のプログラムを実行できるという点では、 C++のテンプレートとも似ているといえますが、 C++のテンプレートはテンプレート専用の文法を用いる必要ある点がLispと異なります。 C++をそれなりに書ける人でも、テンプレートで任意のプログラムを書こうとすると、 かなりの苦労を強いられます。テンプレートの文法がC++の文法と異なるのが苦労する原因の一つです。 一方、Lispのマクロは、Lisp自身で書けるため、 Lispが書ける人なら誰にだって書けてしまうわけです。 以上がLispのマクロが強力と言われる要因(の一部)です。 実際に使われてみると色々と実感できると思いますよ。

nomalphard
質問者

お礼

とても詳しく書いていただきありがとうございました。 まさにベストアンサーだと思います。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

LISP で「マクロ」という名のつくものは複数思いつくんだけど, そのうちどれなんだろう. 「他の言語の言うマクロ」ってなんだろう. BASIC に「マクロ」は存在しなかったような記憶があるんだけど....

関連するQ&A

  • lispとその他関数型言語について

    「lispを学べば悟りが開ける」という言葉をよく聞きます。 l他のプログラミング言語哲学とは一線を画すほどの教示をもった言語という印象を持ちます。 僕もlispを少し学んだだけですが「悟り」は開けませんでした。 しかし他の関数型言語(haskellとか)ではそういう話は聞きません。 なぜでしょうか。 やっぱ括弧ですか。

  • lispの入門書

    lispの入門書を探しています。 lispの書き方をただ説明するだけでなく、他の言語と違ってどういう利点が あるのかを説明したものがいいです。 なにかおすすめの本があったら教えてください。

  • Lispについて

    最近プログラミングについて学ぼうと思っていろいろ調べてるのですが、その中でLispというものを見つけました。 関数型プログラミング言語であることや人工知能の開発に使われているということは分かったのですが、他にどのようなことができるのでしょうか? C言語に代わってソフトウェアの開発などもできるのでしょうか? (C++を学校で学び始めたばかりでまだ何もできないのですが…)

  • LISPで C言語のフォーマット書式の"%02d"

    LISPで C言語のフォーマット書式の"%02d"にあたる記述の仕方がわかりません。どのようにすればよいのでしょうか?

  • LISPはもう、使えませんか?

    こんにちは。 AUTO CAD 2004を使用していますが、 昔のバージョンだと、 自分で作ったLISPをロードして、使えたのですが、 2004では、LISP自体ロードが出来ません。 2004では、LISPは使用できないのでしょうか? 同じく、AUTO CAD 2004LTも同様でしょうか? どなたか、教えて下さい。

  • Common Lispのお仕事

    人工知能のプログラミング言語 とのことですが、今までCommon Lispの求人など 見たことないですし、実際にどういった所で どれほど使われているものなのでしょうか。

  • LISPで・・・

    LISPで8Queenを作ろうと思うのですが、どう作ればいいのかわかりません。 ソースじゃなくても、作る上でのヒントでも何でもいいので、わかることがあれば 教えて下さい。

  • Lispって何処で使用されているのですか

    Lispって何処で使用されているのですか

  • LISPでforeach

    perlでいう、foreachはLISPでは何でしょうか? (1 3 5 7 9) を 1 3 5 7 9と表示させたいです。 perlからLISPに以降するのに参考になる書籍は洋書も含めてあるのでしょうか?

  • c言語 マクロの資料について

    c言語 マクロの資料について 現在、私は、c言語を勉強している処ですが、マクロがなかなか理解できないので困っているところです、マクロの説明しているwebサイトのURLを教えて頂きた。よろしくお願いします。

専門家に質問してみよう