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のマクロが強力と言われる要因(の一部)です。
実際に使われてみると色々と実感できると思いますよ。
No.1
- 回答日時:
LISP で「マクロ」という名のつくものは複数思いつくんだけど, そのうちどれなんだろう.
「他の言語の言うマクロ」ってなんだろう. BASIC に「マクロ」は存在しなかったような記憶があるんだけど....
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel マクロで For 文のインデックスを先に宣言する理由 7 2022/08/27 00:26
- 経済学 「マクロ経済学という言葉は死語になる」とルーカスは言ったそうですが、実際死語になりつつある? 2 2023/03/06 10:56
- Excel(エクセル) エクセルで文字の一部を赤から白に変えるマクロを教えて下さい。 2 2022/10/08 23:01
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- Excel(エクセル) エクセルマクロについて 3 2022/07/14 11:48
- 物理学 ニュートンとかアインシュタインは間違っているのですか。 19 2023/05/15 20:38
- Visual Basic(VBA) VBAとマクロについての質問です。 2 2023/08/01 23:04
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/10 11:34
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/11 11:05
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
メッセージボックスのOKボタ...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
一つのTeratermのマクロで複数...
-
EXCELのVBAでRange("A1:C4")を...
-
Excel VBAからAccessマクロを実...
-
ExcelのVBA。public変数の値が...
-
ソース内の行末に\\
-
ピボットテーブルでの毎回可変...
-
特定文字のある行の前に空白行...
-
ExcelVBAでPDFを閉じるソース
-
マクロの連続実行
-
TERA TERMを隠す方法
-
エクセルに張り付けた写真のフ...
-
VBA初心者 Ctrl+での操作、ボタ...
-
TeraTermマクロの文字列結合
-
エクセルのマクロについて教え...
-
エクセル マクロ 指定日の指定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
他人が作ったマクロの理解
-
ExcelVBAでPDFを閉じるソース
-
TERA TERMを隠す方法
-
エクセルで別のセルにあるふり...
-
マクロ実行時、ユーザーフォー...
-
Excel VBAからAccessマクロを実...
-
EXCELのVBAでRange("A1:C4")を...
-
TeraTermマクロの文字列結合
-
PDF出力マクロについて。マクロ...
-
#defineの定数を文字列として読...
-
エクセルのマクロをセルの値に...
-
wordを起動した際に特定のペー...
おすすめ情報