2011-01-16 9 views
5

क्योंहास्केल में अपेक्षित दोनों मानचित्र (^ 2) xs और map (2 ^) xs क्यों काम करते हैं?

map (^2) [1..10] 

काम और भी

map (2^) [1..10] 

काम करता है?

मैं उम्मीद करता हूं कि यह केवल उनमें से एक के साथ काम करे, दोनों के लिए नहीं।

मैंने सोचा था कि नक्शा [1..10] के सभी तत्वों से अधिक पुनरावृति और फिर map (^2) [1..10] के लिए

[1^2, 2^2, 3^2, ...] 

है। तो मुझे उम्मीद है कि map (2^) [1..10] दिए जाने पर, यह एक सिंटैक्स त्रुटि या कुछ उत्पन्न करेगा, क्योंकि इसे ^ के बाद होने की संख्या की आवश्यकता होगी, पहले नहीं।

+4

आप क्यों उम्मीद करते हैं कि यह केवल उनमें से किसी के लिए काम करे? – sepp2k

+1

मुझे यह कहना है कि जब तक लुई ने उत्तर दिया, तब तक मैं पूरी तरह से प्रश्न को पूरी तरह समझ नहीं पाया। यदि आप केवल [हास्केल रिपोर्ट] (http://www.haskell.org/onlinereport/haskell2010/) पढ़ते हैं तो यह स्पष्ट है कि '(^ 2)' और '(2 ^)' माध्य क्या है। (फिर फिर, मैंने किसी भी नई प्रोग्रामिंग भाषा का उपयोग करने से पहले पूरी भाषा का नमूना पढ़ा; मुझे बताया गया है कि यह एक अजीब आदत है ...) – ephemient

+0

यह एक अजीब लेकिन भयानक आदत है जो इसे बनाए रखती है। – Davorak

उत्तर

16

हास्केल व्याकरण "ऑपरेटर वर्गों" कहा जाता है इस तरह निर्माण के लिए विशेष सहायता, है। आप किसी भी इन्फ़िक्स ऑपरेटर है, की तरह कहते हैं कि #$%, उसके बाद निम्न अंकन समर्थित है:

(#$%) = \x y -> x #$% y 
(#$% y) = \x -> x #$% y 
(x #$%) = \y -> x #$% y 

तो आप इस तोड़ने के लिए कुछ गणितीय स्थिरता की उम्मीद कर रहे हैं, और यदि हास्केल आगे की तरह एक miniscule भाषा थे, मैं झुका होगा अपने अंतर्ज्ञान से सहमत होने के लिए। कारण यह काम करता है मूल रूप से "क्योंकि उन्होंने इसे इस तरह काम करने के लिए लिखा"।

(यह भी जोड़ दिया गया अस्पष्टता को कम करने - f + x मतलब है f दो तर्क के लिए आवेदन किया है, या इसका मतलब यह है + दो तर्क के लिए लागू के बाद से यह वास्तव में उत्तरार्द्ध का मतलब है, हम कैसे पूर्व का प्रतिनिधित्व करते हैं उत्तर: का उपयोग कर? () एक ऑपरेटर अनुभाग लागू करने के लिए।)

+0

आह! "यह कारण मूल रूप से काम करता है" क्योंकि उन्होंने इसे इस तरह काम करने के लिए लिखा था। यह वही था जैसा दिखता था! हमेशा के रूप में बचाव के लिए luqui! धन्यवाद –

+2

अच्छी तरह से [हास्केल रिपोर्ट> अभिव्यक्ति> अनुभाग] पर वर्णित है (http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-300003.5) –

0

(2 ^) एक नया फ़ंक्शन बनाता है जो पैरामीटर और आवेदक (2^पैरामीटर) लेता है। यह करीकरण का एक तरीका है।

यहाँ यह पीछे सिद्धांत के साथ एक लिंक है: Partial Application(Haskell.org)

+0

जो मैंने मूल पोस्ट में नहीं पूछा है (मुझे लगता है कि मैं बहुत स्पष्ट नहीं था)। अन्य उत्तरों को देखो। वैसे भी धन्यवाद –

+0

मुझे लगता है कि ... प्रश्न को समझने के लिए खेद है। –

3

हास्केल जानता है कि ^ एक इन्फ़िक्स ऑपरेटर तो यह (गणितीय संकेतन में) (2^) रूप f(x) = 2^x और (^2)f(x) = x^2 के रूप में व्याख्या है।

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