2015-11-24 5 views
5

हटाया जा सकता है मेरे पास स्ट्रिंग के ऐरे का ऐरे है। मैं उन्हें समतल करने की जरूरत है और मैं का उपयोग करें:यदि Array.append ने उत्परिवर्तनीय तर्कों को आंशिक रूप से लागू नहीं किया है तो लैम्ब्डा को

Array.fold (fun acc el -> Array.append acc el) [||] arr2d 

एक प्रकार का वृक्ष मुझे कहना है कि:

"Array.append नहीं परिवर्तनशील तर्क आंशिक रूप से लागू किया गया फिर लैम्ब्डा हटाया जा सकता है, तो"

इसका क्या अर्थ है? मैं लैम्ब्डा को कैसे हटा सकता हूं?

+1

एक अलग रूप में कोड छोटा किया जा सकता है: 'Array.collect आईडी arr2d ' – Sehnsucht

+0

को आगे बढ़ाया जा सकता है 'Array.concat arr2d' –

उत्तर

9

उस फॉर्म में कोई भी लैम्ब्डा फ़ंक्शन (fun x -> f x) को f के रूप में व्यक्त किया जा सकता है। अपरिवर्तनीय स्थिति होल्डिंग।

अपने कोड में आप fun acc el -> Array.append acc el जो एक ही प्रकार है और Array.append के रूप में ही करता है, तो आप के लिए इसे छोटा कर सकते हैं:

Array.fold Array.append [||] arr2d 
+1

हास्केल लोग उस परिवर्तन को कहते हैं [ईटा कमी] (http://stackoverflow.com/questions/5793843/what-does-eta-reduce-mean-in-the- संदर्भ के- hlint)। – scrwtp

+0

@scrwtp सिर्फ हास्केल लोग नहीं, यह [इसके लिए मानक लैम्ब्डा-कैलकुस नाम] है (https://en.wikipedia.org/wiki/Lambda_calculus#.CE.B7-conversion)। –

+0

@AlexeyRomanov: हाँ, लेकिन केवल हास्केल लोग इसे इस तरह से खोलते हैं;) – scrwtp

संबंधित मुद्दे

 संबंधित मुद्दे