2012-03-17 14 views
1

SchemeまたはRacketのマクロをいつ使用するか、またいつ機能を使用するかについての一般的なガイドラインがありますか?スキームまたはラケットで関数を使用するタイミングとマクロを使用するタイミング

新しい構文を作成しておらず、変数に副作用を作成していない場合は、関数の代わりにマクロを使用する必要があるか、より適切な場合がありますか?

答えて

4

マクロでは全く異なる構文を使用できます。マクロの呼び出しは、関数呼び出しのように見える必要はありませんが、最も単純なマクロではよくあります。また、マクロは、ランタイムの前に別のフェーズで実行されます。したがって、別の構文が必要な場合や、ランタイム前にマクロ展開をしたい場合は、マクロを使用してください。

一般的には、関数を使って完全に行うことができれば、関数を使用するといいでしょう。

+0

非常に明確な説明はありがとうございます。しかし、私が本当に疑問に思うのは、新しい構文を作成せず、変数(たとえば参照による呼び出しのシミュレートなど)に副作用を作成していない場合です。それは良い? –

+2

これを見るもう1つの方法:マクロを使うと、コンパイル時と実行時にどのような計算を行うべきかを決めることができます。コンパイル時の計算は、通常、構文上の問題を扱います。しかし、いくつかのプログラムは、Typed Racketのような型付き言語の型チェック段階のような、コンパイル時の計算に決定的に依存します。ほとんどのプログラマは、コンパイル時に計算を行う必要はありません。コンパイル時に計算を実際に表現する必要がない限り、プレーンなバニラ関数を使用してください。 – dyoo

4

Matthias Felleisenは、この質問の簡単な説明が彼のRacket style guideにあります。

+0

Samに感謝します。私は彼の簡単なコメントに気づいたが、私はスタイルガイドの終わりの彼のtodoリストに気づいた。彼はガイドのためにこの質問の全セクションを書く人を頼むので、私はそれが彼の –

関連する問題