मैं एक समारोह है कि इस प्रकार दिखता है:एफ # क्यूरिंग दक्षता?
let isInSet setElems normalize p =
normalize p |> (Set.ofList setElems).Contains
इस समारोह जल्दी से जाँच करने के लिए है कि क्या एक तत्व कुछ सेट का शब्दार्थ हिस्सा है इस्तेमाल किया जा सकता; उदाहरण के लिए, जाँच करने के लिए एक फ़ाइल पथ एक HTML फ़ाइल के अंतर्गत आता है, तो:
let getLowerExtension p = (Path.GetExtension p).ToLowerInvariant()
let isHtmlPath = isInSet [".htm"; ".html"; ".xhtml"] getLowerExtension
हालांकि, जब मैं इस तरह से ऊपर, प्रदर्शन के रूप में एक समारोह का उपयोग समारोह शरीर के मूल्यांकन के बाद से गरीब के रूप में "isInSet" में लिखा है लगता है सभी पैरामीटर ज्ञात होने तक देरी हो सकती है - विशेष रूप से, (Set.ofList setElems).Contains
जैसे परिवर्तनीय बिट्स को isHtmlPath
के प्रत्येक निष्पादन का पुनर्मूल्यांकन किया जाता है।
मैं सबसे अच्छा व्यवहार कैसे प्राप्त कर सकता हूं, जबकि अभी भी अधिक कुशल व्यवहार प्राप्त कर रहा है जिसमें सेट निर्माण का प्रावधान किया गया है।
उपरोक्त सिर्फ एक उदाहरण है; मैं एक सामान्य दृष्टिकोण की तलाश में हूं जो कार्यान्वयन के विवरण में मुझे नीचे फेंकने से बचाता है - जहां संभव हो मैं कार्यान्वयन के निष्पादन आदेश जैसे विवरणों से विचलित होने से बचना चाहता हूं क्योंकि यह आमतौर पर मेरे लिए महत्वपूर्ण नहीं है और एक प्रमुख को कमजोर करता है कार्यात्मक प्रोग्रामिंग की बिक्री बिंदु।
क्या आपके पास एक लिंक है जिसे आप गणना अभिव्यक्तियों के बारे में पढ़ने की सिफारिश करेंगे? मुझे विचार मिलता है लेकिन विवरण को समझ में नहीं आता है ... –
@Eamon: मैंने अपने उत्तर के अंत में दो लिंक जोड़े। –
महान उदाहरण और गणना के अभिव्यक्तियों के कुछ हद तक झुकाव उपयोग के लिए धन्यवाद! अंततः मुझे उन पर अधिक बारीकी से देखने के लिए आश्वस्त किया - भले ही मुझे यकीन नहीं है कि उन्हें वास्तव में यहां जरूरी है। –