11

制約なしの最小化を行うモジュールがあります。インターフェースをできるだけシンプルに保ちたいので、min_of(F)のような単一の関数に減らすのが最善の選択です。

しかし、残忍な計算になるとすぐに、最小化アルゴリズムの精度と最大反復回数の少なくとも2つの定数を処理する必要があるため、ターゲット関数に極小値がまったくない場合でもハングしません。

とにかく、次善の選択は次のとおりです:min_of(F、Iterations、Eps)。大丈夫ですが、私はそれが好きではありません。別のmin_of(F)で次のように定義してもらいたいです。

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

しかし、マジックナンバーはありません。

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

4

2 に答える 2

22

このようなマクロを定義できます

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

そしてそれらを

min_of(F, ?ITERATIONS, ?EPS).
于 2012-06-02T10:13:19.300 に答える
6

マクロを使用できますが、インライン関数を使用することもできます。

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

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

そしてそれを方法で使用します

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

利点は、を必要とせずにすべての構文ツールを使用できることですepp。この場合、関数の呼び出しもパフォーマンスに重要ではないため、inlineディレクティブなしでも実行できます。

于 2012-06-02T14:17:45.517 に答える