का उपयोग करता है Γ
बिल्ट-इन का मुख्य उपयोग Γ
, जिसे सूचियों या सूची डिकंस्ट्रक्शन पर मिलान करने वाले पैटर्न के रूप में जाना जाता है , एक सूची को सिर और पूंछ में विभाजित करना और उन पर एक बाइनरी फ़ंक्शन लागू करना है। यह हास्केल पैटर्न के मेल खाने वाले मुहावरे से मेल खाती है
f (x : xs) = <something>
f [] = <something else>
जहाँ <something>
एक अभिव्यक्ति है x
, xs
और संभवतः f
। 4 ओवरलोडिंग हैं Γ
, जिनमें से प्रत्येक थोड़ा अलग तरीके से काम करता है।
list
पहला ओवरलोडिंग, list
एक मान a
और एक बाइनरी फ़ंक्शन लेता है f
। यह एक नया फ़ंक्शन देता है जो सूची लेता है, a
यदि यह खाली है, तो वापस आ जाता है f
और अगर यह गैर- खाली है तो सिर और पूंछ पर कॉल करता है। उदाहरण के लिए, Γ_1€
एक सूची लेता है, -1
अगर यह खाली है, और यदि नहीं तो पूंछ में पहले तत्व की पहली घटना का सूचकांक।
listN
दूसरा ओवरलोडिंग, के listN
समान है list
, सिवाय इसके कि a
छोड़ दिया गया है और बदले प्रकार के डिफ़ॉल्ट मान का उपयोग किया जाता है। उदाहरण के लिए, Γ€
के बराबर है Γ0€
, क्योंकि डिफ़ॉल्ट संख्यात्मक मान है 0
।
व्यवहार में, listN
अधिक से अधिक बार उपयोग किया जाता है list
, क्योंकि डिफ़ॉल्ट मान या तो अप्रासंगिक है या वास्तव में आपको क्या चाहिए। एक सामान्य पैटर्न है Γ~αβγ
, जहां αβγ
तीन कार्य हैं; यह β
पहले तत्व और γ
पूंछ पर लागू होता है , और परिणामों को जोड़ती है α
। इस उत्तर में इसका उपयोग किया गया था । अन्य पैटर्न शामिल Γo:α
लागू करने के लिए α
केवल पहला तत्व है, और Γ·:mα
लागू करने के लिए α
पहले को छोड़कर सभी तत्वों के लिए। इस उत्तर में उत्तरार्द्ध का उपयोग किया गया था ।
listF
तीसरा ओवरलोडिंग थोड़ा अधिक शामिल है। जैसे list
, यह एक मान a
और एक फ़ंक्शन लेता है f
, और एक नया फ़ंक्शन देता है g
जो एक सूची लेता है। हालांकि, यह समय f
एक अतिरिक्त फ़ंक्शन तर्क लेता है, जो g
स्वयं है, और इसे किसी भी मूल्य पर कॉल कर सकते हैं (सहित, लेकिन इनपुट सूची की पूंछ तक सीमित नहीं है)। इसका मतलब यह है कि सूचियों पर listF
एक सामान्य पुनरावृत्ति योजना को लागू करता है।
listF
बहुत बार उपयोग नहीं किया जाता है, क्योंकि स्पष्ट उत्तर के साथ list
/ listN
आमतौर पर एक ही लंबाई या छोटी होती है, जैसा कि इस उत्तर में है ।
listNF
listNF
इसके लिए listF
क्या listN
है list
: इनपुट a
छोड़ा गया है, और बदले प्रकार के डिफ़ॉल्ट मान का उपयोग किया जाता है। दुर्लभ परिस्थितियों में, यह एक सही तह से कम हो सकता है, उदाहरण के लिए इस उत्तर में ।
के पुनरावर्ती संस्करणों के एक उदाहरण के रूप में Γ
, फ़ंक्शन Γλ·:o⁰↔
पहले, अंतिम, दूसरे, दूसरे से दूसरे, तीसरे, तीसरे-से-अंतिम, और इसी तरह के क्रम में एक सूची में फेरबदल करता है।
इसे ऑनलाइन आज़माएं!
फ़ंक्शन f
स्पष्ट लंबोदर है λ·:o⁰↔
, जिसका तर्क ⁰
संपूर्ण फ़ंक्शन है। क्या f
करता है के साथ पूंछ को उल्टा है ↔
, तो मुख्य समारोह के साथ पुनरावर्ती कॉल o⁰
, और अंत में सिर के साथ वापस सौदा ·:
। बेशक, Γ·:o₀↔
एक बाइट कम है, लेकिन काम नहीं करता है अगर लाइन में इस फ़ंक्शन के अलावा कुछ और होता है।