2013-02-07 94 views
5

मैं (||>) जो (a' * 'b) -> ('a -> b' -> 'c) -> 'cक्या यह पाइप टुपल ऑपरेटर पहले से मौजूद है * कहीं?

करता है के बारे में पता कर रहा हूँ लेकिन मैं यह काफी उपयोगी खोजने किया गया है, और सोचा कि अगर मैं पहिया पुनर्रचना की गई थी:

// ('a * 'a) -> ('a -> 'b) -> ('b * 'b) 
let inline (|>>) (a,b) f = (f a, f b) 

(* यह भी हो सकता है, मैं केवल आधे घंटे पहले ceil फ़ंक्शन की खोज की गई!)

उत्तर

4

नहीं, ऐसा नहीं है।

हालांकि, यदि आप FParsec का उपयोग करते हैं तो आप अक्सर अपने संस्करण का सामना करेंगे।

val (|>>): Parser<'a,'u> -> ('a -> 'b) -> Parser<'b,'u> 

मुझे लगता है कि पुस्तकालय ऑपरेटरों जो अन्य प्रयोजनों के लिए के रूप में अच्छी सामान्यीकृत किया जा सकता का एक बहुत ही अच्छी तरह से डिजाइन सेट है: यहाँ FParsec दस्तावेज में प्रकार हस्ताक्षर है। एफपीआरसीईसी ऑपरेटरों की सूची here मिल सकती है।

मैंने खुदाई की थोड़ी सी चीज की; |>> ऑपरेटर में built-in Haskell counterpart प्रतीत नहीं होता है हालांकि Control.Arrow का उपयोग करके इसे परिभाषित करना आसान है।

3

आपके द्वारा वर्णित ऑपरेटर अनिवार्य रूप से map फ़ंक्शन दो-तत्व टुपल के लिए है। map समारोह, सामान्य रूप में (कुछ F<'a> के लिए जो एफ # पुस्तकालयों में seq<'a> या कई अन्य प्रकार के हो सकता है) एक हस्ताक्षर है:

map : ('a -> 'b) -> F<'a> -> F<'b> 

तो, अगर आप एक दो तत्व टपल के रूप में F<'a> को परिभाषित है, तो अपने समारोह वास्तव में है बस map (आप तर्क फ्लिप करने पर):

type F<'a> = 'a * 'a 
let map f (a, b) = (f a, f b) 

आपरेशन एफ # पुस्तकालय में अंतर्निहित है नहीं कहीं भी, लेकिन यह है कि यह वास्तव में एक पैटर्न कहीं और एफ # पुस्तकालयों में बहुत आम है कि मेल खाता है महसूस करने के लिए उपयोगी है (सूची, सीईसी, सरणी, आदि)

@pad द्वारा संदर्भित हास्केल जवाब को देखते हुए - सिद्धांत रूप में, हास्केल यह संभव है कि सभी प्रकार के प्रकार कक्षाएं का उपयोग कर इस तरह के कार्य का समर्थन के लिए एक ही समारोह को परिभाषित करने के लिए बनाता है (ताकि आप सिर्फ fmap बजाय Seq.map या बजाय लिखते थे आपके TwoElementTuple.map का, लेकिन यह वास्तव में विभिन्न तकनीकी कारणों से काम नहीं करता है - इसलिए हास्केलर्स को इसे अलग-अलग कॉल करने की आवश्यकता है)।

एफ # में, यह आसानी से संभव विभिन्न प्रकार के लिए एक एकल map समारोह को परिभाषित करने के लिए है, लेकिन आप अभी भी एक map दो तत्व के लिए tuples (आप इसे आसान यह एक प्रतीकात्मक देने के लिए लगता है, भले ही के रूप में अपने कार्य के बारे में सोच सकते हैं map नाम के बजाय ऑपरेटर का नाम।)

+0

अच्छा अवलोकन, मैं इसे 'मानचित्र' पर नामित करने पर विचार करूंगा ... लेकिन मुझे यह मानना ​​होगा कि मुझे पाइपिंग अर्थशास्त्र पसंद है .. – Benjol

+1

मुझे लगता है कि यहां प्रतीकात्मक नाम का उपयोग शायद अच्छा है - यह वास्तव में आपके विशिष्ट उपयोग पर निर्भर करता है। (लेकिन मैं सामान्य रूप से प्रतीकात्मक नामों का एक बड़ा प्रशंसक नहीं हूं, क्योंकि मुझे उन्हें समझने में कठिनाई होती है।) –

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

  • कोई संबंधित समस्या नहीं^_^