GHC user guide से यह PBangPat
हो सकता है सबसे Pat
की तरह लगता है, लेकिन वहाँ कुछ अपवाद हैं। जैसे मॉड्यूल में शीर्ष-स्तरीय बैंग (जैसे !main
) और x : !xs
x : (!xs) parses
धन्यवाद @chi को पार्स करने में विफल रहता है। बैंग्स को कहां जोड़ा जा सकता है इसके बारे में औपचारिक विनिर्देश क्या है? मैंने उपयोगकर्ता मार्गदर्शिका और रिपोर्ट के कुछ अध्यायों में देखा है लेकिन कुछ भी नहीं मिला है।BangPatterns कहां दिखाए जा सकते
उत्तर
BangPatterns के लिए कोई स्वीकार्य औपचारिक विनिर्देश नहीं है क्योंकि वे किसी भी हास्केल रिपोर्ट का हिस्सा नहीं हैं। हमारे पास एक विनिर्देशन की सबसे नज़दीकी चीज है जो उपयोगकर्ता की मार्गदर्शिका है, जिसमें हैकेल-प्राइम प्रस्ताव के साथ लिंक है।
दोनों स्रोत स्पष्ट रूप से उल्लेख करते हैं कि मॉड्यूल के शीर्ष स्तर पर एक बैंग पैटर्न की अनुमति नहीं है।
pat ::= !pat
यह:
हम पैटर्न की वाक्य रचना के लिए एक एकल नई उत्पादन जोड़ें:
x : !xs
का सवाल है, उपयोगकर्ता मार्गदर्शिका इस धमाके के पैटर्न के सिंटैक्स के बारे में क्या कहना है हास्केल 2010 रिपोर्ट के साथ संयोजन में पढ़ा जाना चाहिए:pat ::= lpat qconop pat | lpat lpat ::= apat | - (integer | float) | gcon apat_1 ... apat_k apat ::= var [ @ apat] | ... | (pat) | ...
इन नियमों
x : !xs
वास्तव में पार्स चाहिए के अनुसार (के बाद से!xs
एकpat
है, पूरी बातlpat qconop pat
है)। तो या तो उपयोगकर्ता की मार्गदर्शिका (और हैकेल-प्राइम प्रस्ताव) गलत है या इस बिंदु पर जीएचसी गलत है।मेरा मानना है कि अभ्यास में जीएचसी द्वारा स्वीकार किए गए वाक्यविन्यास ऑपरेटर
!
के एक भाग के रूप में(!x)
को व्याख्या करने सहित "वैध अभिव्यक्ति की तरह दिखता है"। उदाहरण के लिए(! Just x)
एक पैटर्न के रूप में स्वीकार किया जाता है लेकिन(! ! x)
नहीं है।
दरअसल [उपयोगकर्ता की मार्गदर्शिका का प्रासंगिक अनुभाग] (https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/bang-patterns.html#bang -पर्टर्न-सेम) इतना पुराना है कि यह * हास्केल 98 * रिपोर्ट से जुड़ा हुआ है, और उस समय बीएनएफ व्याकरण ने प्राथमिकता को अलग-अलग व्यवहार किया था। [विशेष रूप से पैटर्न के लिए] (https://www.haskell.org/onlinereport/exps.html#sect3.17.1), 'pat :: =! Pat' जोड़ना * सबसे कम प्राथमिकता * में जोड़ना है। –
हालांकि, इस पढ़ने से '(!! X) '* * काम करना चाहिए लेकिन परेशान नहीं है। –
@ ØrjanJohansen, ओह अच्छा बिंदु। मैंने रिपोर्ट के लिंक का पालन करने का प्रयास नहीं किया क्योंकि मेरे पास पहले से ही एक अन्य टैब में 2010 की रिपोर्ट खुल गई थी। इससे विवरण वास्तविकता के करीब आता है, हालांकि आप कहते हैं कि अभी भी वही नहीं है। –
- 1. पृष्ठ लोड पर दिखाए जा रहे अभिव्यक्तियों से बचें
- 2. मेरी स्ट्रीमिंग सदस्यता कहां जा रही है?
- 3. Google Analytics एंड्रॉइड एसडीके कस्टम वर्र्स पंजीकृत नहीं/दिखाए नहीं जा रहे हैं?
- 4. LISP मैक्रोज़ कितनी दूर जा सकते हैं?
- 5. गो-लांग करी कैसे जा सकते हैं?
- 6. एसक्यूएल क्वेरी हटाए जा सकते हैं रिकॉर्ड
- 7. जा सकते हैं 'ध्वज` पैकेज प्रिंट उपयोग?
- 8. Async रिकर्सन। वास्तव में मेरी याददाश्त कहां जा रही है?
- 9. समस्या: बुलबुले दिखाए गए हैं
- 10. क्यों पाइथन सजावट परिभाषाओं में बंधे नहीं जा सकते हैं?
- 11. RecyclerView, कुछ आइटम नहीं दिखाए जाते हैं
- 12. पॉपअप दिखाए जाने पर पृष्ठभूमि रंग बदलें
- 13. टूलटिप पर ही दिखाए जाएं अंडाकार सक्रिय
- 14. मानचित्र में दिखाए गए मार्कर खोजें
- 15. एएसपी .NET एमवीसी - प्रकाशित बिल्डिंग में चित्र नहीं दिखाए जा रहे हैं
- 16. डीबगर डिस्प्ले के साथ दिखाए गए पाठ में स्ट्रिंग स्वरूपण का उपयोग किया जा सकता है?
- 17. इसे बिना किसी दिखाए साजिश सहेजें
- 18. इसे दिखाए बिना एक फॉर्म लोड करें
- 19. ग्रहण StatusManager विस्तार नहीं दिखाए जाते
- 20. आप सी # भाषा विनिर्देश कहां पा सकते हैं?
- 21. मुझे जावाईई पैकेज के स्रोत कहां मिल सकते हैं?
- 22. मुझे एमवीसी के स्पष्ट उदाहरण कहां मिल सकते हैं?
- 23. मुझे अच्छे डोमेन संचालित डिजाइन संसाधन कहां मिल सकते हैं?
- 24. आप जेडीके में मूल कोड कहां पा सकते हैं?
- 25. इससे पहले कि कोई फॉर्म कैसे दिखाए?
- 26. बैकबोन दिखाए गए दृश्यों को छुपा/छुपाएं सर्वोत्तम अभ्यास
- 27. एक तूफान बोल्ट से लॉगिंग - यह कहां जा रहा है?
- 28. मेरी याददाश्त कहां जा रही है यह जानने के लिए
- 29. यह देखकर कि एआरसी कहां डाला जा रहा है और
- 30. एसक्यूएल क्वेरी - मैं गलत कहां जा रहा हूं?
अच्छा सवाल है, हालांकि संदेह है कि यह शायद सबसे अच्छा है कि बैंगपेटर्न का उपयोग न करें बल्कि पुराना 'सीक'। – leftaroundabout
'x: (! Xs)' parses – chi