हास्केल में हम तीन तरह से नए प्रकार परिभाषित करने के लिए है, तीन अलग कीवर्ड, प्रकार, newtype, और डेटा का उपयोग कर।
आपके उदाहरण में यह डेटा कीवर्ड उपयोग में है, चलो इस पर थोड़ा और ध्यान दें।
यह अपने कोड
data E = A | B
यहाँ से आने वाले सबसे आसान एक के साथ शुरू करने के लिए बेहतर है, हम एक नए प्रकार के ई जो केवल दो मोड या राज्य या मूल्य ले जा सकते हैं परिभाषित किया है।
ऐसा एक प्रकार है जिसे हम योग प्रकार कहते हैं। हम इसका उपयोग कैसे कर सकते हैं?
अधिकतर पैटर्न मिलान के साथ।
useE :: E -> String
useE A = "This is A"
useE B = "This is B"
अब, आपके कोड से एक अधिक जटिल डेटा घोषणा।
data Q = Q0 | Q1 | Q2 deriving (Eq, Enum, Bounded)
फिर, जैसा कि पहले कहा कि हम एक योग प्रकार जो एक नए प्रकार के प्रश्न को परिभाषित, ले लिया तीन मूल्य, Q0, Q1 या Q2 की है। लेकिन हमारे पास क्लॉज प्राप्त करने वाला है, जो संकलक को बताता है कि यह नया प्रकार ईक, एनम, बाउंड क्लास से प्राप्त विधि (या फ़ंक्शन) को प्राप्त करने (या विरासत) को लागू करता है। इसका क्या अर्थ है?
चलिए एक फ़ंक्शन पर नज़र डालें।
कल्पना कीजिए कि आप क्यू के प्रत्येक मूल्य के लिए एक संख्या को जोड़ना चाहते हैं, हम इसे कैसे कर सकते हैं?
enumQ :: Q -> Int
enumQ x = fromEnum x
आप इस विशेष कार्यक्षमता के बारे में और अधिक जानकारी, खंड पाने द्वारा प्रदान संसाधनों जो संकेत दिया है पढ़ सकते हैं और कोशिश करना चाहते हैं: GHCi के तहत जानकारी Enum। ध्यान दें कि पिछला प्रकार उसी वर्ग से भी प्राप्त हो सकता है। चूंकि इन प्रकारों को पूरी तरह से मान के एक मूल्यवान सेट के योग के रूप में वर्णित किया गया है (द्वारा भेदभावित) हम बेहतर समझते हैं कि हम उन्हें योग प्रकार क्यों कहते हैं।
अंततः सबसे कठिन डेटा घोषणा।
data DFA q o = DFA (q -> o -> q) q [q]
data NFA q o = NFA (q -> o -> [q]) [q] [q]
वे लगभग एक ही डेटा परिभाषा हैं तथ्य यह है तो मैं पहले एक गर्त जाने के लिए और आप एक व्यायाम के रूप दूसरा एक के विश्लेषण करने देगा।
data DFA q o = DFA (q -> o -> q) q [q]
इस बार हम के बारे में डेटा निर्माता और प्रकार निर्माता बात करना चाहिए।
- समानता के बाएं हाथ की तरफ, डेटा निर्माता, बनाया आंकड़ों के और यह एक नाम देना है। इस तरफ हमारे पास इस नए डेटा को बनाने के लिए आवश्यक पैरामीटर आवश्यक है।
- समानता के दाईं ओर, प्रकार का निर्माता, इस नए प्रकार का निर्माण किया गया है। इस तरफ हमारे पास स्पष्ट प्लम्बरिंग है जो पाठक को दिखाती है कि मौजूदा प्रकार का उपयोग करके यह नया प्रकार (डेटा) बनाया गया है।
अब ध्यान में रखते हुए, जो निम्न, प्रकार के होते हैं
- [x] ::: प्रकार बहुरूपी सूची, उदाहरण के लिए, [इंट] => इंट
की सूची का प्रतिनिधित्व
- एक्स ::: एक बुनियादी प्रकार, मौजूदा एक में से एक (इंट, चार, स्ट्रिंग ...)
- एक्स -> y ::: प्रकार जो एक समारोह लिया एक प्रकार एक्स परिभाषित ठेस यूसी टाइप वाई।
- x -> y -> z ::: टाइप प्रकार को उत्पन्न करने के लिए एक प्रकार x और टाइप वाई को टाइप करें। जिसे एक प्रकार के फ़ंक्शन के रूप में देखा जा सकता है (x-> y) और एक प्रकार जेड उत्पन्न करना। यही वह है जिसे हम हाई-ऑर्डर फ़ंक्शन कहते हैं।
तो हमारे डेटा घोषणा, इस संदर्भ में डाल दिया, एक डेटा निर्माता, ओ और एक परिणाम के रूप में दो प्रकार पैरामीटर, क्ष और द्वारा फ़ीड है, इसके बारे में उत्पाद के रूप में एक नए प्रकार वापसी एक उच्च क्रम कार्य एक मूल प्रकार और एक सूची प्रकार। जो बताता है कि हम इसे उत्पाद प्रकार क्यों कहते हैं।
यह आपके प्रश्न का उत्तर देने के लिए पर्याप्त हो सकता है, अब एन 1 क्या करता है?
शुभकामनाएं।
[आपको बहुत अच्छे के लिए हास्केल सीखें] (http://learnyouahaskell.com/) शायद शुरू करने के लिए एक अच्छी जगह है। असाइनमेंट के साथ प्रगति शुरू करने के लिए आपको कम से कम बुनियादी हास्केल प्रकार हस्ताक्षर पढ़ने और समझने में सक्षम होना चाहिए। – shang
दूसरा, आप विकिपीडिया लेख [डीएफए] (http://en.wikipedia.org/wiki/Deterministic_finite_automaton) और [एनएफए] (http://en.wikipedia.org/wiki/Nondeterministic_finite_automata) पर पढ़ सकते हैं। – shang