हास्केल में सूचियों के संदर्भ में "@" प्रतीक का क्या अर्थ है?


128

मुझे हास्केल कोड का एक टुकड़ा मिला है जो इस तरह दिखता है:

ps@(p:pt)

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


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

1
अच्छी बात यह है कि मैंने ठीक-ठीक उल्लेख किया है कि मैंने उस URL, @Iter को कैसे पाया। आज कोई भी इस प्रक्रिया को दोहरा सकता है और जो भी पृष्ठ उन्हें मिलता है, उस पर उत्तर पा सकता है।
रोब कैनेडी

जवाबों:


179

हां, यह सिंटैक्टिक शुगर है, @"जोर से" के रूप में पढ़ें। ps@(p:pt)आपको नाम देता है

  1. सूचि: ps
  2. सूची के प्रमुख: p
  3. सूची की पूंछ: pt

बिना @, आपको (1) या (2) :( 3) के बीच चयन करना होगा।

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


3
क्या आप इस वाक्यविन्यास का नाम जानते हैं?
दांजा

7
इसे
adamo

41

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

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

tails                   :: [a] -> [[a]]
tails []                =  [[]]
tails xxs@(_:xs)        =  xxs : tails xs

21

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

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टपल क्रमशः में


9

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.