मुझे आश्चर्य है कि गुना बाएं द्वारा अपेक्षित फ़ंक्शन को b -> a -> a
के बजाय 0 हस्ताक्षर a -> b -> a
टाइप करें। क्या इसके पीछे कोई डिज़ाइन निर्णय है?गुना क्यों छोड़ दिया जाता है (ए -> बी -> ए) (बी -> ए -> ए) के बजाय?
हास्केल में, उदाहरण के लिए, मुझे को foldl (:) [] xs
(जो b -> a -> a
के साथ संभव होगा) की बजाय सूची को रिवर्स करने के लिए foldl (\xs x -> x:xs) [] xs
लिखना होगा। दूसरी ओर, ऐसे उपयोग मामले हैं जिनके लिए मानक a -> b -> a
की आवश्यकता होती है। स्कैला में, यह संलग्न हो सकता है: xs.foldLeft(List.empty[Int]) ((xs, x) => xs:+x)
जिसे xs.foldLeft(List.empty[Int]) (_:+_)
के रूप में लिखा जा सकता है।
आनुपातिक रूप से अधिक उपयोग मामलों को वैकल्पिक विकल्प के बजाय दिए गए प्रकार के हस्ताक्षर की आवश्यकता होती है, या क्या ऐसे अन्य निर्णय हैं जो बास्क के डिजाइन को हास्केल और स्कैला (और शायद अन्य कई भाषाओं) में ले जाते हैं?
दूसरे शब्दों में, आपको सूची को वापस करने के लिए '(:)' के तर्क आदेश को उलटना होगा। मेरी समझ मे आ रहा है। –
ध्यान दें कि 'mapAccumL' और' mapAccumR' ('Data.List' /' Data.Traversable' से) के समान हस्ताक्षर हैं, हालांकि वे विपरीत दिशाओं में भी काम करते हैं। – leftaroundabout