2009-07-20 16 views
95

मैं हास्केल कोड के एक टुकड़े में आया हूं जो इस तरह दिखता है:हास्केल में सूचियों के संदर्भ में "@" प्रतीक का क्या अर्थ है?

[email protected](p:pt) 

@ प्रतीक इस संदर्भ में क्या अर्थ है? मुझे Google पर कोई जानकारी नहीं मिल रही है (दुर्भाग्य से Google पर प्रतीकों की खोज करना मुश्किल है), और मुझे प्रीलूड दस्तावेज़ में फ़ंक्शन नहीं मिल रहा है, इसलिए मुझे लगता है कि यह इसके बजाय कुछ प्रकार की वाक्य रचनात्मक चीनी होना चाहिए।

+12

की कोशिश मत करो उस विशिष्ट प्रतीक के लिए खोजें। सामान्य रूप से हास्केल वाक्यविन्यास के लिए खोजें, और फिर उस समग्र चर्चा में प्रतीक पाएं। उदाहरण के लिए, "हास्केल सिंटैक्स" के लिए शीर्ष Google परिणाम: http://www.cs.utep.edu/cheon/cs3360/pages/haskell-syntax.html। उस पृष्ठ पर '@' की दूसरी घटना बताती है। –

+1

अच्छी बात मैंने उल्लेख किया कि मुझे यह यूआरएल कैसे मिला, @Iter। कोई भी आज प्रक्रिया को दोहरा सकता है और जो भी पेज उन्हें ढूंढता है उसे जवाब मिल सकता है। –

उत्तर

138

हां, यह सिंटैक्टिक चीनी है, @ के साथ "as" के रूप में जोर से पढ़ें। ps

  • सूची के सिर: p
  • सूची की पूंछ: pt
  • @ के बिना, आप के बीच चयन करना होगा (1 [email protected](p:pt) आप नाम के लिए

    1. सूची प्रदान करती है) या (2) :(3)।

      यह वाक्यविन्यास वास्तव में किसी भी निर्माता के लिए काम करता है; यदि आपके पास data Tree a = Tree a [Tree a] है, तो [email protected](Tree _ kids) आपको पेड़ और उसके दोनों बच्चों तक पहुंच प्रदान करता है।

    +0

    क्या आप इस वाक्यविन्यास के नाम को जानते हैं? – danza

    36

    @ प्रतीक दोनों पैरामीटर को नाम देने के लिए प्रयोग किया जाता है और @ के बाद वाले पैटर्न के विरुद्ध पैरामीटर से मेल खाता है। यह सूचियों के लिए विशिष्ट नहीं है और अन्य डेटा संरचनाओं के साथ भी इसका उपयोग किया जा सकता है।

    यह उपयोगी है अगर आप अपने हिस्सों में पैरामीटर को "विघटित" करना चाहते हैं, जबकि अभी भी आपके फ़ंक्शन में पूरी तरह से पैरामीटर की आवश्यकता है। एक उदाहरण जहां यह मामला है मानक पुस्तकालय से tails समारोह है:

    tails     :: [a] -> [[a]] 
    tails []    = [[]] 
    tails [email protected](_:xs)  = xxs : tails xs 
    
    7

    में जोड़ने के लिए अन्य लोगों को क्या कहा है, वे के रूप में पैटर्न (एमएल में वाक्य रचना कीवर्ड "का उपयोग करता है कहा जाता है के रूप में "), और patterns पर हास्केल रिपोर्ट के अनुभाग में वर्णित हैं।

    11

    मैं जिसका अर्थ है आप यह कर सकते हैं सभी स्तरों पर कि @ काम करता है जोड़ना चाहते हैं,:

    let a @ (b @ (Just c), Just d) = (Just 1, Just 2) in (a, b, c, d) 
    

    कौन सा है तो इस का उत्पादन करेगा: ((Just 1, Just 2), Just 1, 1, 2)

    तो मूल रूप से यह आप एक पैटर्न बाध्य करने के लिए एक रास्ता है एक मूल्य के लिए। इसका मतलब यह भी है कि यह के साथ किसी भी पैटर्न के साथ काम करता है, न केवल सूचियों के अनुसार, जैसा कि ऊपर दिखाया गया है। यह जानना बहुत उपयोगी बात है, क्योंकि इसका मतलब है कि आप इसे कई मामलों में उपयोग कर सकते हैं।

    इस मामले में, a पूरे Maybe Tuple है, b सिर्फ टपल में पहली Just है, और c और d मूल्यों पहले और दूसरे Just टपल में में निहित हैं क्रमशः

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