अन्य अच्छे उत्तर हैं, इसलिए मैं आपको एक बहुत ही तकनीकी उत्तर देने जा रहा हूं।
"उन्मूलन का निर्माण" का अर्थ है "कैसे का उपयोग करने या एक मूल्य के उपयोग करने के लिए" के अलावा
"बीजीय डेटा प्रकार",: पैटर्न मिलान उन्मूलन बीजीय डेटा प्रकार के लिए निर्माण है प्रथम श्रेणी के काम करता है, स्वच्छ, एफ #, हास्केल, या एमएल
की तरह एक स्थिर टाइप किया कार्यात्मक भाषा में बड़ा विचार है बीजीय डेटा प्रकार का विचार है कि आप एक प्रकार की चीज़ को परिभाषित करते हैं, और आप कहते हैं कि आप इसे सब कुछ कर सकते हैं। उदाहरण के लिए, इसे बनाने के तीन तरीके के साथ, एक बीजीय डेटा प्रकार के रूप में "स्ट्रिंग के अनुक्रम" को परिभाषित करते हैं:
data StringSeq = Empty -- the empty sequence
| Cat StringSeq StringSeq -- two sequences in succession
| Single String -- a sequence holding a single element
अब, बातें इस परिभाषा के साथ गलत के सभी प्रकार देखते हैं, लेकिन एक उदाहरण के रूप में यह दिलचस्प है क्योंकि यह मनमाने ढंग से लंबाई के अनुक्रमों के निरंतर समय समामेलन प्रदान करता है। (इसे हासिल करने के अन्य तरीके हैं।) घोषणा Empty
, Cat
, और Single
प्रस्तुत करती है, जो अनुक्रम बनाने के सभी तरीके हैं। (यही कारण है कि हर एक को एक परिचय — चीजें बनाने के लिए एक तरह से निर्माण बना देता है।)
- आप किसी भी अन्य मूल्यों के बिना एक खाली अनुक्रम बना सकते हैं।
Cat
के साथ अनुक्रम बनाने के लिए, आपको दो अन्य अनुक्रमों की आवश्यकता है।
Single
साथ एक दृश्य बनाने के लिए, आप एक तत्व (एक स्ट्रिंग इस मामले में) की जरूरत है
यहाँ पंच लाइन आता है:, उन्मूलन निर्माण, पैटर्न मिलान आप एक दृश्य की जांच और पूछने के लिए एक रास्ता देती है यह प्रश्न आपने किस कन्स्ट्रक्टर के साथ बनाया था?। क्योंकि आपको किसी भी उत्तर के लिए तैयार रहना है, आप प्रत्येक कन्स्ट्रक्टर के लिए कम से कम एक विकल्प प्रदान करते हैं। यहाँ लंबाई समारोह है:
slen :: StringSeq -> Int
slen s = case s of Empty -> 0
Cat s s' -> slen s + slen s'
Single _ -> 1
भाषा के मूल में, सभी पैटर्न मिलान इस case
निर्माण पर बनाया गया है। हालांकि, क्योंकि बीजीय डेटा प्रकार और पैटर्न मिलान भाषा का मुहावरे के लिए इतना महत्वपूर्ण है, वहाँ एक समारोह परिभाषा की घोषणा के रूप में पैटर्न मिलान करने के लिए विशेष "वाक्यात्मक चीनी":
slen Empty = 0
slen (Cat s s') = slen s + slen s'
slen (Single _) = 1
इस वाक्यात्मक चीनी के साथ
, पैटर्न मिलान द्वारा गणना समीकरणों द्वारा परिभाषा की तरह दिखती है। (हास्केल समिति ने इसे उद्देश्य पर किया।) और जैसा कि आप अन्य उत्तरों में देख सकते हैं, उस पर एक गार्ड को मारकर case
अभिव्यक्ति में समीकरण या विकल्प को विशेषज्ञता देना संभव है। मैं अनुक्रम उदाहरण के लिए एक व्यावहारिक गार्ड के बारे में नहीं सोच सकता, और अन्य उत्तरों में बहुत से उदाहरण हैं, इसलिए मैं इसे वहां छोड़ दूंगा।
शायद एफ # में पैटर्न मिलान अवधारणा को भी शामिल करना चाहिए ... –
टन भाषाओं में पैटर्न मिलान होता है, न केवल हास्केल और एफ #। – Joe
यह शुद्ध-कार्यात्मक और बाधा भाषाओं की एक आम विशेषता है। प्रोलॉग, एरलांग और एसएमएल, उदाहरण के लिए। – outis