2012-08-10 13 views
7

यह समारोह(,) आंतरिक रूप से परिभाषित कैसे किया जाता है?

(,) :: a -> b -> (a,b) 
(,) a b = (a,b) 

अजीब (मेरे लिए) बात यह है कि इस समारोह मनमाना लंबाई tuples के लिए परिभाषित किया गया है है फिर से परिभाषित करने तुच्छ है।

(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) :: a -> b -> c -> ... -> (a,b,c,...) 

यह कैसे किया जाता है: तो, उदाहरण के लिए, वहाँ वास्तव में एक समारोह है? यह ज़िप की तरह tuples पर सभी मानक कार्यों के लिए क्यों नहीं किया जाता है?

होगल मुझे no results देता है, और मुझे नहीं लगता कि टेम्पलेट हास्केल यह कैसे कर सकता है, इसलिए मुझे लगता है कि यह कंपाइलर के अंदर कुछ प्रकार का जादू होना चाहिए। लेकिन यह मेरे लिए बहुत ही अस्पष्ट लगता है।

+1

आपको अभी अपना प्रश्न होना चाहिए। –

+1

बहुत un-haskelly, लेकिन सच है। – augustss

उत्तर

6

यह कैसे किया जाता है?

कंपाइलर समर्थन। हास्केल भाषा रिपोर्ट कम से कम 15 तर्क (6.1.4) के लिए समर्थित होने के लिए (,) को जरूरी है, लेकिन जीएचसी थोड़ा आगे जाता है और उन्हें बहुत अधिक उत्पन्न करता है (पिछली बार हमने इसका परीक्षण किया है, यह सैकड़ों या हजारों को भी संभाल सकता है)। zip और अन्य ट्यूपल फ़ंक्शंस को 7-टुपल्स तक परिभाषित किया जाना चाहिए। मुझे नहीं पता कि जीएचसी बड़ी मात्रा में उनको उत्पन्न करता है या नहीं।

+1

"सैकड़ों या यहां तक ​​कि हजारों" <- वास्तव में? नेस्टेड tuples का उपयोग करें या एक डेटा type' परिभाषित जब मैं कोशिश: GHC 7.4.1 रिपोर्ट 'एक 63-टपल (अधिकतम आकार 62 है) वर्कअराउंड GHC के लिए बहुत बड़ी है। –

+0

क्यों 62? 64 (2^6) बहुत अधिक समझ में आता है। कोई भी जानता है कि अतिरिक्त 2 क्या जाता है? –

+2

Typechecker कुछ सेटिंग्स में घातीय समय है। इसकी वजह से कुछ कक्षाओं को लंबे tuples के लिए परिभाषित नहीं किया गया है, जीएचसी के लिए स्रोत कोड देखें। Ghc-prim से। – permeakra

2

मेरी समझ यह है कि (,) एक नियमित कार्य नहीं है, यह विशेष वाक्यविन्यास वाला एक कन्स्ट्रक्टर है, जो लंगेज में हार्ड वायर्ड है। यह वाक्यविन्यास [1, 2, 3] जैसा है, जिसे आप स्वयं परिभाषित नहीं कर सकते क्योंकि यह कठिन है।

2

यह भाषा परिभाषा में निर्दिष्ट है और संकलक में हार्ड वायर्ड है। आप हास्केल में टुपल्स को परिभाषित नहीं करते हैं, हास्केल की परिभाषा में टुपल्स शामिल हैं।

टुपल्स के लिए स्वीकार्य (,,,) वाक्यविन्यास है, जो अज्ञात उत्पाद प्रकार हैं, जो काफी मौलिक हैं। ये टाइप अनुमान के साथ पूरी तरह से अच्छी तरह से खेलते हैं, क्योंकि प्रत्येक घटक मौजूद है और अनुमान लगाया जा सकता है।

अज्ञात योग प्रकारों के लिए कोई स्वीकृत वाक्यविन्यास नहीं है, और वे प्रकार अनुमान के साथ अच्छी तरह से खेल नहीं सकते हैं।

हास्केल उपयोगकर्ता के definable इन्फ़िक्स वाक्य रचना नहीं बल्कि उपयोगकर्ता के definable कोष्ठक (व्यापक अर्ध के हवाले से संभावनाओं के बाहर) प्रदान करता है।

संबंधित मुद्दे