2012-06-02 3 views
9

制限のない最小化を行うモジュールを用意しました。私は可能な限りシンプルなインターフェースを保ちたいので、min_of(F)のような単一の関数に減らすことをお勧めします。Erlangで一定のものを定義する方法

しかし残酷な計算をするとすぐに、最小化アルゴリズムの精度と最大反復回数の2つの定数を処理する必要があります。ターゲット関数が極小値を持たない場合すべて。

とにかく、次に選択するのは、min_of(F、Iterations、Eps)です。大丈夫ですが、私はそれが好きではありません。

min_of(F) -> 
    min_of(F, 10000, 0.0001). 

しかし、マジックナンバーなし:私はまだ別のmin_of(F)は、このようなものを定義していたいと思います。

私はErlangを初めて使っているので、これを適切に処理する方法がわかりません。マクロ、変数、または定数を返す関数を定義する必要がありますか?それとも何か他のもの?私は非常に表現力のあるErlangを見つけたので、この質問は技術的な質問よりも良い習慣のようです。

答えて

19

あなたはこの

-define(ITERATIONS, 10000). 
-define(EPS, 0.0001). 

のようなマクロを定義して、あなたがマクロを使用することができますが、あなたはまたでライニング機能を使用することができます

min_of(F, ?ITERATIONS, ?EPS). 
5

としてそれらを使用することができます。その後、

-compile({inline, [iterations/0, eps/0]}). 

iterations() -> 10000. 
eps() -> 0.0001. 

および利点は、あなたがeppを必要とせずにすべての構文ツールを使用することができない方法

min_of(F) -> 
    min_of(F, iterations(), eps()). 

でそれを使用しています。この場合でも、関数の呼び出しはパフォーマンス上重要ではないので、inlineディレクティブを使わなくても実行できます。

関連する問題