2009-11-08 17 views
41

मैं A Gentle Introduction to Haskell पढ़ रहा हूं (जो इतना सौम्य नहीं है) और यह बार-बार : ऑपरेटर का उपयोग सीधे बताता है कि यह क्या करता है।इन्फिक्स ऑपरेटर हास्केल में क्या करता है?

तो, यह वास्तव में क्या करता है?

x : xs 

एक सूची है जो x पहला तत्व के रूप में है देता है, xs के सभी तत्वों के द्वारा पीछा किया:

+19

यह बिल्कुल भी सभ्य नहीं है। यदि यह कार्यात्मक प्रोग्रामिंग के साथ आपका पहला संपर्क है, तो मैं इस साइट की सिफारिश करता हूं: http://learnyouahaskell.com/ इस साइट के माध्यम से पढ़ने के बाद फिर एक सज्जन परिचय पर लौटें। यह वास्तव में बहुत आसान तरीका है। –

उत्तर

65

: "आगे जोड़ते" ऑपरेटर है। अन्य कार्यात्मक भाषाओं में, यह आम तौर पर, cons कहा जाता है क्योंकि यह "विपक्ष" एक खाली सूची से दोहराया आवेदन के द्वारा रिकर्सिवली एक सूची tructs:

1 : 2 : 3 : 4 : [] 

सूची [1, 2, 3, 4] है।

+0

यह '++' ऑपरेटर से अलग कैसे है जो सूचियों को जोड़ता है? – dlkulp

+2

@dlkulp '++' एक सूची को दूसरे में जोड़ता है। ':' पहला तर्क टाइप 'ए' (एक मनमाना प्रकार) है और दूसरा तर्क टाइप '[ए]' है जो' ए' के तत्वों की सूचियों का प्रकार है। –

21

हमेशा जीएचसीआई/एचयूजीएस में प्रकारों की जांच कर सकता है, क्योंकि ट्यूटोरियल में पहले चरण आपको जीएचसी/एचयूजीएस डाउनलोड करने के लिए प्रोत्साहित करते हैं।

Prelude> :t (:) 
(:) :: a -> [a] -> [a] 
Prelude> :t (++) 
(++) :: [a] -> [a] -> [a] 

अपने संबंधित प्रकारों से, उनके उपयोग को कम करना काफी आसान है।

पीएस: http://haskell.org/hoogle/ शानदार है।

+1

आप पूरी तरह से सही हैं। +1 – moo

+1

धन्यवाद श्रीमान! यदि आप hoogle डाउनलोड करते हैं, तो आप इसे ghc के भीतर फ़ंक्शन के रूप में उपयोग कर सकते हैं। यह बहुत प्यारा है। आपको आयात किए बिना टाइप या फ़ंक्शन नाम से खोज करने की अनुमति देता है, बीट्स: टी हर तरह से। – codebliss

+0

तकनीकी रूप से (:) x (:) xs = xs या x (:) xs = xs ++ [x] – alternative

9

यह सूचियों के लिए प्रकार का निर्माता है। यह किसी अन्य प्रकार के कन्स्ट्रक्टर से Just या Left से अलग नहीं है, सिवाय इसके कि यह इंफिक्स है। वैध प्रकार के निर्माता या तो पूंजी पत्र, या कोलन से शुरू होने वाले प्रतीकों से शुरू होने वाले शब्द हो सकते हैं।

तो आप अपने डेटा प्रकारों के लिए इंफिक्स कन्स्ट्रक्टर को परिभाषित कर सकते हैं।

data MyList a = a :> MyList a 
       | Empty 

ऊपर कोड हम एक प्रकार दो कंस्ट्रक्टर्स साथ MyList बुलाया परिभाषित में: उदाहरण के लिए पहले एक अजीब दिखने निर्माता :> जो एक तत्व और एक अन्य MyList a लेता है; दूसरा एक खाली कन्स्ट्रक्टर Empty है जो Haskell की मूल सूचियों में [] के बराबर है।

data MyList a = Cons a (MyList a) 
       | Empty 
12

: हास्केल में ऑपरेटर सूचियों के लिए निर्माता है

ऊपर के बराबर है। इसके बाद निर्दिष्ट सूची में कोलन से पहले जो भी 'विपक्ष' है।

उदाहरण के लिए, पूर्णांक पर प्रत्येक नंबर 'consing' द्वारा पूर्णांक की एक सूची बनाई जाती है, ई।जी;

सूची [1,2,3,4] के रूप में निर्माण किया जा सकता है:

  • 4 : [] (खाली सूची consing 4)
  • 3 : [4] पर
  • 2 : [3,4] (consing 2 (consing 3 युक्त 4 सूची पर) सूची 3, 4)
  • 1 : [2,3,4] (2,3,4 युक्त सूची में 1 को पेश करना)

आपको दे रहा है;

[1,2,3,4] 

पूरी तरह लिखा गया है;

1 : 2 : 3 : 4 : [] 
संबंधित मुद्दे