बीजगणित डेटा प्रकारों के लिए वाक्यविन्यास Backus–Naur Form के सिंटैक्स के समान है, जिसका उपयोग संदर्भ मुक्त व्याकरण का वर्णन करने के लिए किया जाता है। मुझे लगता है कि अगर हम किसी भाषा के लिए पार्सर के रूप में हास्केल प्रकार चेकर के बारे में सोचते हैं, तो बीजगणितीय डेटा प्रकार (उदाहरण के लिए टर्मिनल प्रतीकों का प्रतिनिधित्व करने वाले न्युलरी प्रकार के रचनाकार) के रूप में प्रतिनिधित्व किया जाता है, तो सभी भाषाओं का सेट स्वीकार किया जाता है संदर्भ मुक्त भाषाओं का सेट? साथ ही, इस व्याख्या के साथ, औपचारिक भाषाओं का कौन सा सेट जीएडीटी स्वीकार कर सकता है?नियमित हैकेल बीजगणितीय डेटा प्रकार संदर्भ मुक्त व्याकरण के बराबर हैं? GADTS के बारे में क्या?
उत्तर
सबसे पहले, डेटा प्रकार हमेशा तारों के सेट का वर्णन नहीं करते हैं (यानी, एक भाषा)। यही है, जबकि एक सूची प्रकार करता है, एक पेड़ प्रकार नहीं करता है। कोई इसका सामना कर सकता है कि हम पेड़ों को सूचियों में "फटकार" सकते हैं और उनकी भाषा के रूप में सोच सकते हैं। फिर भी, क्या
data F = F Int (Int -> Int)
या की तरह डेटा प्रकार, बदतर
data R = R (R -> Int)
के बारे में?
बहुपद प्रकार (->
के बिना प्रकार) लगभग पेड़ों का वर्णन करते हैं, जिन्हें चपटा (इन-ऑर्डर का दौरा किया जा सकता है), तो चलिए उन्हें उदाहरण के रूप में उपयोग करते हैं। जब से तुम प्रत्यावर्तन दोहन कर सकते हैं
data A = A1 Int A | A2 Int B
data B = B1 Int B Char | B2
A
ऊपर
व्यक्त करता { Int^m Char^n | m>n }
आप महसूस किया होगा, एक CFG एक (बहुपद) प्रकार के रूप में लेखन, आसान है।
जीएडीटी संदर्भ-मुक्त भाषाओं से काफी दूर है।
data Z
data S n
data ListN a n where
L1 :: ListN a Z
L2 :: a -> ListN a n -> ListN a (S n)
data A
data B
data C
data ABC where
ABC :: ListN A n -> ListN B n -> ListN C n -> ABC
ABC
ऊपर
(चपटा) भाषा A^n B^n C^n
, जो विषय से मुक्त नहीं है व्यक्त करता है।
आप जीएडीटी के साथ बहुत अधिक अप्रतिबंधित हैं, क्योंकि उनके साथ अंकगणित एन्कोड करना आसान है। यह है कि आप एक प्रकार Plus a b c
बना सकते हैं जो पीनो स्वाभाविक के साथ गैर-खाली iff c=a+b
है। आप एक प्रकार Halt n m
भी बना सकते हैं जो ट्यूरिंग मशीन m
इनपुट m
पर रोकता है, तो गैर-खाली iff है। तो, आप एक भाषा
{ A^n B^m proof | n halts on m , and proof proves it }
जो रिकर्सिव (और किसी भी सरल वर्ग में, मोटे तौर पर नहीं) बना सकते हैं।
फिलहाल, मुझे नहीं पता कि आप जीएडीटी में पुनरावर्ती संख्यात्मक (संगणनीय रूप से गणना करने योग्य) भाषाओं का वर्णन कर सकते हैं या नहीं। यहां तक कि रोकथाम की समस्या उदाहरण में, मुझे इसे काम करने के लिए जीएडीटी के अंदर "सबूत" शब्द शामिल करना होगा।
Intuitively, अगर आप लंबाई n
के एक स्ट्रिंग है और आप इसे एक एक GADT के खिलाफ जांच करना चाहते हैं, तो आप गहराई n
के सभी GADT शर्तों, निर्माण उन्हें समतल, और फिर स्ट्रिंग के लिए तुलना कर सकते हैं। यह साबित करना चाहिए कि ऐसी भाषा हमेशा रिकर्सिव होती है। हालांकि, अस्तित्व के प्रकार इस पेड़ की इमारत दृष्टिकोण काफी मुश्किल बनाते हैं, इसलिए मेरे पास अभी एक निश्चित उत्तर नहीं है।
- 1. संदर्भ-मुक्त व्याकरण बनाम संदर्भ-व्याकरण व्याकरण?
- 2. प्रोलॉग में संदर्भ व्याकरण मुक्त व्याकरण
- 3. हास्केल के बीजगणितीय डेटा प्रकार: "छद्म-विस्तार"
- 4. संदर्भ-मुक्त व्याकरण नियमित अभिव्यक्तियों का वर्णन करता है?
- 5. क्या आधुनिक प्रोग्रामिंग भाषाओं के व्याकरण संदर्भ-मुक्त या संदर्भ-संवेदनशील हैं?
- 6. रूबी के बराबर ...? हैकेल
- 7. बीजगणितीय प्रकार
- 8. कौन सी प्रोग्रामिंग भाषाएं संदर्भ-मुक्त हैं?
- 9. क्या भाषाएं, व्याकरण, पार्सिंग और कंपाइलर्स के बारे में जानने के लिए कोई "मजेदार" तरीके हैं?
- 10. संदर्भ मुक्त व्याकरण से एन कथन उत्पन्न करना
- 11. चॉम्स्की पदानुक्रम में प्रकार वर्गों और व्याकरण के स्तर के बीच पत्राचार
- 12. क्या दो प्रकार के बराबर हैं() विधि
- 13. GADTs
- 14. सी ++: मुक्त-स्थायी संदर्भ क्या हैं?
- 15. क्या पॉलीमोर्फिज्म के संबंध में संदर्भ और पॉइंटर्स बराबर हैं?
- 16. हैकेल नियमित अभिव्यक्तियों में समूहांकन
- 17. डिफ़ॉल्ट रूप से हैकेल डेटा प्रकार सह-बीजगणित हैं?
- 18. हैकेल अक्षर के साथ बराबर चिह्न
- 19. रेडक्स के साथ प्रतिक्रिया? 'संदर्भ' मुद्दे के बारे में क्या?
- 20. बराबर (=) बनाम दिनांक डेटा प्रकार
- 21. क्या जावा 7 spec में व्याकरण वास्तव में बराबर है?
- 22. शायद के साथ लपेटने के बजाए बीजगणितीय डेटा प्रकार के साथ निरंतर कन्स्ट्रक्टर का उपयोग करें?
- 23. बीजगणितीय डेटा प्रकारों के रिकर्सिव तल-अप ट्रैवर्सल
- 24. संघर्ष मुक्त मुक्त डेटा प्रकार (सीआरडीटी) बनाम पैक्सोस या राफ्ट
- 25. Agda में आकार के प्रकार क्या हैं?
- 26. व्याकरण और कम से कम पार्सर को पहचानने के बारे में क्या है?
- 27. 'कहां' खंड के अंदर 'अवरक्त-हैकेल-प्रकार'?
- 28. लेक्सिकल व्याकरण और सिंटेक्टिक व्याकरण के बीच क्या अंतर है?
- 29. कोई भी ऑनलाइन मुक्त डेटाबेस के बारे में जानता है?
- 30. क्या Yacc व्याकरण डिबगर्स हैं?
आपके सीएफजी उदाहरण में, '' '' '' '' '{Int^m char^n | एम = एन + 1} '' '' '' '{Int^m char^n | एम> एन} '' ' – NightRa
@ नाइटरा वास्तव में, धन्यवाद। अब तय किया जाना चाहिए। – chi