2012-06-02 10 views
9

में निरंतर कुछ कैसे परिभाषित करना चाहिए मेरे पास एक मॉड्यूल है जो कुछ गैर-सीमित न्यूनतमकरण करता है। मैं अपने इंटरफ़ेस को यथासंभव सरल रखना चाहता हूं, इसलिए सबसे अच्छा विकल्प इसे एक ही फ़ंक्शन में कम करना होगा जैसे: min_of (F)।मुझे एरलांग

लेकिन जैसे ही यह क्रूर गणना है, मुझे कम से कम दो स्थिरांक से निपटना होगा: न्यूनतमकरण एल्गोरिदम की अधिकतमता और पुनरावृत्तियों की अधिकतम संख्या, इसलिए लक्ष्य फ़ंक्शन में स्थानीय न्यूनतम नहीं होने पर यह स्वयं नहीं लटका होगा सब।

वैसे भी, अगली सबसे अच्छी पसंद है: min_of (एफ, Iterations, Eps)। यह ठीक है, लेकिन मुझे यह पसंद नहीं है। मैं अभी भी एक और min_of (एफ) को इस तरह कुछ परिभाषित करना चाहता हूं:

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

लेकिन जादू संख्याओं के बिना।

मैं एरलांग के लिए नया हूं, इसलिए मुझे नहीं पता कि इस तरीके से कैसे निपटें। क्या मुझे मैक्रोज़ को परिभाषित करना चाहिए, एक चर या शायद एक स्थिर कार्य लौट रहा है? या कुछ और भी? मैंने एरलांग को काफी अभिव्यक्तिपूर्ण पाया, इसलिए तकनीकी प्रश्न की तुलना में यह सवाल एक अच्छा अभ्यास प्रतीत होता है।

उत्तर

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. 

और उसके बाद जिस तरह से

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

लाभ आप epp की आवश्यकता के बिना सभी वाक्य रचना उपकरणों का उपयोग कर सकते हैं में उपयोग करें। इस मामले में फ़ंक्शन को कॉल करना भी महत्वपूर्ण नहीं है, इसलिए आप inline निर्देश के बिना भी जा सकते हैं।