हास्केल में डॉट ऑपरेटर
मैं समझने की कोशिश कर रहा हूँ कि इस हास्केल कोड में डॉट ऑपरेटर क्या कर रहा है:
sumEuler = sum . (map euler) . mkList
संक्षिप्त जवाब
बिना डॉट्स के समतुल्य कोड, बस
sumEuler = \x -> sum ((map euler) (mkList x))
या लंबोदर के बिना
sumEuler x = sum ((map euler) (mkList x))
क्योंकि डॉट (।) फ़ंक्शन संरचना को इंगित करता है।
लंबा जवाब
पहले, के आंशिक आवेदन को सरल बनाने के euler
लिए map
:
map_euler = map euler
sumEuler = sum . map_euler . mkList
अब हमारे पास बस डॉट्स हैं। इन बिंदुओं से क्या संकेत मिलता है?
से स्रोत :
(.) :: (b -> c) -> (a -> b) -> a -> c
(.) f g = \x -> f (g x)
इस प्रकार (.)
है तो लिखें ऑपरेटर ।
लिखें
गणित में, हम कार्यों की संरचना, f (x) और g (x) लिख सकते हैं, अर्थात, f (g (x)),
(च) जी) (एक्स)
जिसे "g के साथ रचित f" पढ़ा जा सकता है।
तो हास्केल में, एफ, जी, या एफ जी के साथ रचित, लिखा जा सकता है:
f . g
रचना साहचर्य है, जिसका अर्थ है कि रचना ऑपरेटर के साथ लिखा हुआ f (g (h (x))), किसी भी अस्पष्टता के बिना कोष्ठक को छोड़ सकता है।
यही है, क्योंकि (f) g) equivalent h f g (g) h) के बराबर है, हम बस f write g। H लिख सकते हैं।
पीछे घूमना
हमारे पहले के सरलीकरण पर वापस आते हुए, यह:
sumEuler = sum . map_euler . mkList
बस इसका मतलब है कि sumEuler
उन कार्यों की एक अज्ञात संरचना है:
sumEuler = \x -> sum (map_euler (mkList x))