जो संपत्ति गुना है वह यह है कि यह एक सूची-पुनरावर्ती कार्य है, जो अन्य सभी सूची-पुनरावर्ती कार्यों के बराबर है, बशर्ते आप इसे सही पैरामीटर दें।
इसमें यह संपत्ति है, क्योंकि यह पैरामीटर के रूप में स्वीकार करता है, जो फ़ंक्शंस सूची में आइटम पर लागू होंगे।
उदाहरण के लिए, अगर हम एक सरल योग समारोह लिखा है:
sum [] = 0
sum (head:tail) = head + (sum tail)
तो हम वास्तव में यह एक गुना समारोह के बजाय के रूप में, लिख सकता है (+) ऑपरेटर जो हम गठबंधन करने के लिए उपयोग करना चाहते हैं में पारित करके आइटम:
sum list = foldl (+) 0 list
तो कोई भी फ़ंक्शन जो किसी सूची में आसानी से और पुनरावर्ती रूप से कार्य करता है उसे एक गुना फ़ंक्शन के रूप में पुनः लिखा जा सकता है। वह समानता वह संपत्ति है जो इसे रखती है। मेरा मानना है कि वह संपत्ति सार्वभौमिक कहता है, क्योंकि यह अपवाद के बिना सभी इन रैखिक-सूची-रिकर्सिव एल्गोरिदम पर काम करता है।
और जैसा कि वह बताता है, इस संपत्ति का कारण इतना उपयोगी है, क्योंकि हम इन सभी अन्य एल्गोरिदम वास्तव में गुना के बराबर साबित कर सकते हैं, गुना के बारे में कुछ साबित करके, हम इसे अन्य सभी एल्गोरिदम के लिए भी साबित करते हैं।
मैं व्यक्तिगत रूप से गुना समारोह समझना कठिन पाया, तो कभी कभी मैं अपने खुद के लिए प्रयोग किया जाता है जो इस प्रकार है:
-- forall - A kind of for next loop
-- list is list of things to loop through
-- f is function to perform on each thing
-- c is the function which combines the results of f
-- e is the thing to combine to when the end of the list is reached
forall :: [a] -> (a->b) -> (b->b->b) -> b -> b
forall [] f c e = e
forall (x:xs) f c e = c (f x) (forall xs f c e)
(क्योंकि यह लागू करने के अतिरिक्त सुविधा है यह वास्तव में थोड़ा foldl से अधिक शक्तिशाली है सूची में प्रत्येक आइटम को फ़ंक्शन करें।)
अच्छी तरह से मेरे कार्य के बारे में कुछ भी साबित नहीं हुआ। लेकिन उस बात नहीं है, क्योंकि मैं दिखा सकते हैं कि मेरे समारोह एक गुना समारोह वास्तव में है:
forall l f c e = foldl c e (map fn l)
और इसलिए सभी चीजें हैं जो के बारे में गुना साबित किया गया है, यह भी मेरी forall समारोह के लिए सच साबित हो रहे हैं, और मेरे पूरे कार्यक्रम में इसके सभी उपयोग। (ध्यान दें कि हमें यह भी विचार करने की आवश्यकता नहीं है कि प्रत्येक अलग-अलग कॉल में फोरल और फोल्ड करने के लिए किस प्रकार की फ़ंक्शन सी प्रदान की जाती है, इससे कोई फर्क नहीं पड़ता!)
4 साल बाद मैंने पूछा, और आज रात मैं इस बारे में बात कर रहे एक लेख में आया।मुझे नहीं पता कि यह मेरे प्रश्न का पूरी तरह उत्तर देगा, लेकिन यह निश्चित रूप से संबंधित है। "सार्वभौमिक संपत्ति" के लिए इस यूआरएल को खोजें: http://jeremykun.com/2013/04/16/categories-whats-the-point/ –
मजेदार, चार साल पहले मुझे नहीं पता था कि एक सार्वभौमिक संपत्ति क्या थी। अब मैं ब्लॉग पोस्ट की उस श्रृंखला को लिख रहा हूं। सार्वभौमिक गुणों पर एक और विस्तृत पोस्ट लिखते समय मैं इस पर कितना संयोग था। अगले हफ्ते में किया जाना चाहिए। – JeremyKun
@ बीन, इसे सुनकर खुशी हुई! मैं इसे पढ़ने की उम्मीद करूँगा। क्योंकि मुझे एक स्याही लगाना शुरू हो रहा है, फिर भी मैं दावा करने में सक्षम होने से एक * लंबा * तरीका हूं, मैं गहराई से समझता हूं कि सार्वभौमिक संपत्ति क्या है। –