Cum ar trebui să definim ceva constant în Erlang

Am un modul care face niște minimizări fără restricții. Aș dori să păstrez interfața ei cât mai simplă posibil, deci cea mai bună alegere ar fi să o reduci la o singură funcție de tipul: min_of (F).

Dar de îndată ce calculul este brutal, ar trebui să mă ocup de cel puțin două constante: precizia algoritmului de minimizare și a numărului maxim de iterații, astfel încât să nu se blocheze dacă funcția țintă nu are deloc minimum.

Oricum, următoarea opțiune este: min_of (F, Iterations, Eps). E ok, dar nu-mi place. Aș dori să mai am încă un min_of (F) definit ceva de genul:

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

Dar fără numere magice.

Sunt nou la Erlang, așa că nu știu cum să rezolv acest lucru în mod corespunzător. Ar trebui să definim o macrocomandă, o variabilă sau poate o funcție care returnează o constantă? Sau chiar altceva? Am aflat că Erlang este destul de expresiv, astfel încât această întrebare pare a fi mai degrabă o practică bună decât o întrebare tehnică.

0

2 răspunsuri

Puteți utiliza macrocomenzi, dar puteți utiliza și funcții în linie.

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

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

și apoi utilizați-l în cale

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

Beneficiul este că puteți utiliza toate instrumentele de sintaxă fără a fi nevoie de epp . În acest caz, de asemenea, chemarea funcției nu este critică de performanță, astfel încât puteți chiar să mergeți fără directivă inline .

0
adăugat

You can define macros like this

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

and then use them as

min_of(F, ?ITERATIONS, ?EPS).
0
adăugat