language lawyer - How is 'block' granularity in Haskell defined? -
मैंने देखा कि यह हास्केल में कानूनी नहीं है:
foo :: [a] - & gt; [A] foo [] = [] बार = 3 foo (x: xs) = x: foo xs
हालांकि, यह है:
foo :: [ए] - & gt; [एक] बार = 3 फू [] = [] फू (एक्स: एक्स) = एक्स: एफू एक्सएस यद्यपि एक फ़ंक्शन के लिए मिलान किए गए पैटर्न को एक सेट के रूप में एक साथ समूहीकृत किया जाना चाहिए, ऐसा लगता है कि प्रकार के हस्ताक्षर भटक सकते हैं लेकिन कितनी दूर? मुझे बताया गया था कि यह एक ही "ब्लॉक" में होना चाहिए ... लेकिन तकनीकी रूप से बोलना, "ब्लॉक" क्या है?
प्रत्येक फ़ंक्शन के लिए घोषणाएं एक साथ होनी चाहिए, अन्य घोषणाओं को किसी भी क्रम में फ़ाइलों में हो सकता है।
, अनुभाग 4.4.3.1 में, कार्य बाइंडिंग, कहते हैं < Blockquote>
ध्यान दें कि किसी फ़ंक्शन को परिभाषित करने वाले सभी खंड सटे होने चाहिए, और प्रत्येक खंड में पैटर्नों की संख्या समान होनी चाहिए। प्रत्येक मैच के अनुरूप पैटर्न का सेट रैखिक होना चाहिए --- कोई चर पूर्ण सेट में एक से अधिक बार प्रदर्शित होने की अनुमति नहीं है।
आपके पास चार शीर्ष-स्तरीय घोषणाएं हैं: बार
बार = 3
के लिए एक घोषणा foo
के लिए दो घोषणाएं
foo [] = [] foo (x: xs) = x: foo xs
फ़ू
के लिए एक प्रकार का हस्ताक्षर
<पूर्व> फू :: [ए] - & gt; [ए]
फ़ंक्शन बाइंडिंग के लिए निकटवर्ती घोषणाओं को छोड़कर, ये किसी भी क्रम में एक ही फ़ाइल में एक दूसरे से किसी भी दूरी पर हो सकते हैं और अभी भी एक ही अर्थ है।
< H3> चलो और कहां चलो
और जहां
भी गैर-शीर्ष-स्तरीय घोषणाएं लागू करें कार्यवाही के लिए निकटवर्ती घोषणाओं को छोड़कर, इन घोषणाओं में, घोषणाएं किसी भी क्रम में हो सकती हैं और अभी भी एक ही अर्थ है। विभिन्न स्कोप में किए गए घोषणाएं जरूरी एक ही अर्थ नहीं हैं। स्कोप का वर्णन अनुभाग 3.12 में, अभिव्यक्तियों को दें
अभिव्यक्ति दें सामान्य रूप से let {d1; ...; Dn} ई में
, और घोषणाओं की एक नेस्टेड, लेक्सिफिक स्किड, परस्पर-रिकर्सिव सूची ( दो
को अक्सर letrec
को अन्य भाषाओं में] कहा जाता है) का परिचय देता है। घोषणाओं का दायरा अभिव्यक्ति है ई और घोषणाओं के दाहिने हाथ की ओर। घोषणाएं अध्याय 4 में वर्णित हैं। फ़ंक्शन बाइंडिंग और पैटर्न बाइंडिंग के अलावा, एक चलो
या जहां
भी टाइप हस्ताक्षर और स्थिरता प्रस्तुत कर सकते हैं घोषणाएं।
Comments
Post a Comment