- ベストアンサー
LISPのマクロと他の言語のマクロの違い
LISPのマクロは強力と言われていますが、他の言語の言うマクロとはどう違うのでしょうか?
- nomalphard
- お礼率75% (170/225)
- その他(プログラミング・開発)
- 回答数2
- ありがとう数2
- みんなの回答 (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のマクロが強力と言われる要因(の一部)です。 実際に使われてみると色々と実感できると思いますよ。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
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も同様でしょうか? どなたか、教えて下さい。
- ベストアンサー
- CAD・DTP
- Common Lispのお仕事
人工知能のプログラミング言語 とのことですが、今までCommon Lispの求人など 見たことないですし、実際にどういった所で どれほど使われているものなのでしょうか。
- ベストアンサー
- その他(プログラミング・開発)
- LISPで・・・
LISPで8Queenを作ろうと思うのですが、どう作ればいいのかわかりません。 ソースじゃなくても、作る上でのヒントでも何でもいいので、わかることがあれば 教えて下さい。
- ベストアンサー
- その他(プログラミング・開発)
- LISPでforeach
perlでいう、foreachはLISPでは何でしょうか? (1 3 5 7 9) を 1 3 5 7 9と表示させたいです。 perlからLISPに以降するのに参考になる書籍は洋書も含めてあるのでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- c言語 マクロの資料について
c言語 マクロの資料について 現在、私は、c言語を勉強している処ですが、マクロがなかなか理解できないので困っているところです、マクロの説明しているwebサイトのURLを教えて頂きた。よろしくお願いします。
- ベストアンサー
- C・C++・C#
お礼
とても詳しく書いていただきありがとうございました。 まさにベストアンサーだと思います。