खोज…


कई चैनलों के साथ समारोह रचनाएँ

Arrow , अस्पष्ट रूप से बोलने वाली आकृति विज्ञान की श्रेणी है, जो धारावाहिक रचना और "समानांतर रचना" दोनों के साथ, कार्यों की तरह रचना करती है। हालांकि यह फ़ंक्शन के सामान्यीकरण के रूप में सबसे दिलचस्प है, Arrow (->) उदाहरण खुद ही पहले से ही काफी उपयोगी है। उदाहरण के लिए, निम्न कार्य:

spaceAround :: Double -> [Double] -> Double
spaceAround x ys = minimum greater - maximum smaller
 where (greater, smaller) = partition (>x) ys

भी तीर combinators के साथ लिखा जा सकता है:

spaceAround x = partition (>x) >>> minimum *** maximum >>> uncurry (-)

इस तरह की रचना को आरेख के साथ सर्वोत्तम रूप से देखा जा सकता है:

                       ──── minimum ────
                   ╱           *            ╲
──── partition (>x) >>>        *        >>>  uncurry (-) ───
                   ╲           *            ╱
                       ──── maximum ──── 

यहाँ,

  • >>> ऑपरेटर साधारण का एक फ़्लिप किया गया संस्करण है . रचना ऑपरेटर (एक <<< संस्करण भी है जो दाएं-से-बाएं रचना करता है)। यह डेटा को एक प्रोसेसिंग चरण से अगले तक पाइप करता है।

  • बाहर जा रहा डाटा प्रवाह से संकेत मिलता है दो "चैनल" में विभाजित है। हास्केल प्रकारों के संदर्भ में, यह ट्यूल के साथ महसूस किया जाता है:

    partition (>x) :: [Double] -> ([Double], [Double])
    

    दो [Double] चैनलों में प्रवाह को विभाजित करता है, जबकि

    uncurry (-) :: (Double,Double) -> Double
    

    दो Double चैनल को मर्ज करता है।

  • *** समानांतर रचना ऑपरेटर है। यह डेटा के विभिन्न चैनलों पर स्वतंत्र रूप से maximum और minimum संचालित करने देता है। कार्यों के लिए, इस ऑपरेटर के हस्ताक्षर हैं

    (***) :: (b->c) -> (β->γ) -> (b,β)->(c,γ)
    

Hask वर्ग में कम से कम (यानी में पर Arrow (->) उदाहरण), f***g नहीं करता है वास्तव में गणना f और g में के रूप में समानांतर, अलग धागे पर में। यह सैद्धांतिक रूप से संभव होगा, यद्यपि।



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