कार्यों के लिए एटा-रूपांतरण
मेरे एक समाधान में इस टिप के लिए लकोनी का बहुत धन्यवाद ।
किसी फ़ंक्शन पर विचार करें, कहें, अपर-केस अक्षरों के लिए 3 और अन्य सभी वर्णों के लिए एक स्ट्रिंग लिखें। इसलिए:
let counter input = Seq.sumBy (fun x -> if Char.IsUpper x then 3 else 1) input
एटा-रूपांतरण द्वारा इसे इस प्रकार लिखा जा सकता है:
let counter = Seq.sumBy (fun x -> if Char.IsUpper x then 3 else 1)
और पहले की तरह ही बुलाया गया:
counter "Hello world!" |> printfn "%i"
समारोह आगे-रचना ऑपरेटर >>
अब मान लें कि हमारी मूल चुनौती ऊपरी मामले के पत्रों के लिए 3 और निचले मामलों के पत्रों के लिए 1 के साथ एक स्ट्रिंग की राशि होगी, और अन्य सभी वर्णों को बाहर रखा गया है।
हम इसे इस प्रकार लिख सकते हैं:
let counter input = Seq.filter Char.IsLetter input |> Seq.sumBy (fun x -> if Char.IsUpper x then 3 else 1)
हम >>
दो कार्यों ( Seq.filter
और Seq.sumBy
) को एक साथ करने के लिए फॉरवर्ड-कंपोजिशन ऑपरेटर ( ) का उपयोग कर सकते हैं। एटा-रूपांतरण के साथ फ़ंक्शन परिभाषा बन जाएगी:
let counter = Seq.filter Char.IsLetter >> Seq.sumBy (fun x -> if Char.IsUpper x then 3 else 1)
क्रिस स्मिथ ने >>
अपने MSDN ब्लॉग पर ऑपरेटर पर एक शानदार लेखन किया ।