खोज…


टिप्पणियों

समारोह रचना ऑपरेटर (.) के रूप में परिभाषित किया गया है

(.) :: (b -> c) -> (a -> b) ->  (a -> c)
(.)       f           g          x =  f (g x)     -- or, equivalently,  

(.)       f           g     =   \x -> f (g x)     
(.)       f     =    \g     ->  \x -> f (g x)      
(.) =    \f     ->   \g     ->  \x -> f (g x)      
(.) =    \f     ->  (\g     -> (\x -> f (g x) ) ) 

प्रकार (b -> c) -> (a -> b) -> (a -> c) रूप में लिखा जा सकता है (b -> c) -> (a -> b) -> a -> c क्योंकि -> दाईं ओर दिए गए फंक्शन एप्लिकेशन के अनुसार दाईं ओर स्थित हस्ताक्षर "सहयोगी" टाइप करें,

 f g x y z ...    ==    (((f g) x) y) z ...

तो "डेटाफ्लो" दाईं ओर से बाईं ओर है: x "जाता है" g , जिसका परिणाम f में जाता है, अंतिम परिणाम का उत्पादन:

(.)       f           g          x =  r
                                      where r = f (g x)  
-- g :: a -> b
-- f ::      b -> c
-- x :: a      
-- r ::           c   

(.)       f           g     =    q
                                 where q = \x -> f (g x) 
-- g :: a -> b
-- f ::      b -> c
-- q :: a      -> c

....

कृत्रिम रूप से, निम्नलिखित सभी समान हैं:

(.) f g x  =  (f . g) x  =  (f .) g x  =  (. g) f x 

" ऑपरेटर सेक्शन के तीन नियम" के रूप में समझ पाना आसान है, जहां "लापता तर्क" बस ऑपरेटर के पास खाली स्लॉट में जाता है:

(.) f g    =  (f . g)    =  (f .) g    =  (. g) f   
--         1             2             3  

समीकरण के दोनों किनारों पर मौजूद x छोड़ा जा सकता है। इसे एटा-संकुचन के रूप में जाना जाता है। इस प्रकार, फ़ंक्शन रचना के लिए परिभाषा लिखने का सरल तरीका बस है

(f . g) x   =   f (g x)

यह पाठ्यक्रम "तर्क" x को संदर्भित करता है; जब भी हम x बिना सिर्फ (f . g) लिखते हैं तो इसे बिंदु मुक्त शैली के रूप में जाना जाता है।

दाएं-बाएं रचना

(.) हमें दो कार्यों की रचना करने देता है, एक के आउटपुट को दूसरे को इनपुट के रूप में खिलाता है:

(f . g) x = f (g x)

उदाहरण के लिए, यदि हम एक इनपुट नंबर के उत्तराधिकारी को वर्ग करना चाहते हैं, तो हम लिख सकते हैं

((^2) . succ) 1        --    4

वहाँ भी है (<<<) जो एक उपनाम है (.) । इसलिए,

(+ 1) <<< sqrt $ 25    --    6

बाएँ से दाएँ रचना

Control.Category परिभाषित (>>>) , जो, जब कार्यों के लिए विशेष है

-- (>>>) :: Category cat => cat a b -> cat b c -> cat a c  
-- (>>>) :: (->) a b -> (->) b c -> (->) a c 
-- (>>>) :: (a -> b) -> (b -> c) -> (a -> c) 
( f >>> g ) x = g (f x)

उदाहरण:

sqrt >>> (+ 1) $ 25    --    6.0

बाइनरी फ़ंक्शन के साथ रचना

नियमित रचना एकात्मक कार्यों के लिए काम करती है। बाइनरी के मामले में, हम परिभाषित कर सकते हैं

(f .: g) x y = f (g x y)          -- which is also
             = f ((g x) y)
             = (f . g x) y        -- by definition of (.)
             = (f .) (g x) y
             = ((f .) . g) x y   

इस प्रकार, एटा-संकुचन द्वारा और (इसके अलावा, (f .: g) = ((f .) . g) , और इसके बाद,

(.:) f g    = ((f .) . g)
            = (.) (f .) g
            = (.) ((.) f) g
            = ((.) . (.)) f g

so (.:) = ((.) . (.)) , एक अर्ध-प्रसिद्ध परिभाषा।

उदाहरण:

(map (+1) .: filter) even [1..5]      --  [3,5]
(length   .: filter) even [1..5]      --  2


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow