खोज…


टिप्पणियों

अधिकांश हास्केल फ़ंक्शन को फ़ंक्शन नाम के साथ तर्कों (उपसर्ग संकेतन) के बाद कहा जाता है। ऐसे कार्यों के लिए जो दो तर्कों (+) को स्वीकार करते हैं, यह कभी-कभी फ़ंक्शन (infix) से पहले और बाद में एक तर्क प्रदान करने के लिए समझ में आता है।

प्रस्तावना

तार्किक

&& तार्किक है और, || तार्किक है या।

== समानता है, /= गैर-समानता, < / <= कम और > / >= अधिक से अधिक ऑपरेटरों।

अंकगणितीय आपरेटर

संख्यात्मक ऑपरेटर + , - और / जैसा आप चाहते हैं वैसा ही व्यवहार करेंगे। (राउंडिंग मुद्दों से बचने के लिए डिवीजन केवल भिन्नात्मक संख्याओं पर काम करता है - पूर्णांक विभाजन को quot या div साथ किया जाना चाहिए)। हास्केल के तीन घातांक ऑपरेटर अधिक असामान्य हैं:

  • ^ किसी भी संख्या प्रकार का आधार एक गैर-नकारात्मक, अभिन्न शक्ति के लिए लेता है। यह ( तेज ) पुनरावृत्त गुणन द्वारा सरलता से कार्य करता है। उदाहरण के लिए

    4^5  ≡  (4*4)*(4*4)*4
    
  • ^^ सकारात्मक मामले में भी यही करता है, लेकिन नकारात्मक घातांक के लिए भी काम करता है। उदाहरण के लिए

    3^^(-2)  ≡  1 / (2*2)
    

    ^ विपरीत, इसके लिए एक भिन्नात्मक आधार प्रकार की आवश्यकता होती है (अर्थात 4^^5 :: Int काम नहीं करेगा, केवल 4^5 :: Int या 4^^5 :: Rational )।

  • ** वास्तविक संख्या घातांक को लागू करता है। यह बहुत सामान्य तर्कों के लिए काम करता है, लेकिन ^ या ^^ ^ तुलना में अधिक महंगा है, और आम तौर पर छोटी फ़्लोटिंग-पॉइंट त्रुटियों को जन्म देता है।

    2**pi  ≡  exp (pi * log 2)
    

सूचियाँ

दो संघचालक हैं:

  • : (स्पष्ट विपक्ष ) एक सूची से पहले एक ही तर्क प्रस्तुत करता है। यह ऑपरेटर वास्तव में एक कंस्ट्रक्टर है और इस प्रकार इसका उपयोग एक सूची के मिलान ("उलटा निर्माण") के लिए भी किया जा सकता है।

  • ++ संपूर्ण सूचियों को संगृहीत करता है।

    [1,2] ++ [3,4]  ≡  1 : 2 : [3,4]  ≡  1 : [2,3,4]  ≡  [1,2,3,4]
    

!! एक अनुक्रमणिका ऑपरेटर है।

[0, 10, 20, 30, 40] !! 3  ≡  30

ध्यान दें कि अनुक्रमण सूचियों अक्षम है (जटिलता हे (एन) के लिए हे (1) के बजाय सरणियों या के लिए (लॉग एन) नक्शे ); यह आमतौर पर हास्केल में अनुक्रमणिका के बजाय ओटी पैटर्न को मोड़कर सूचियों को फिर से बनाने के लिए पसंद किया जाता है।

बहाव को काबू करें

  • $ एक फ़ंक्शन अनुप्रयोग ऑपरेटर है।

    f $ x  ≡  f x
           ≡  f(x)  -- disapproved style
    

    यह ऑपरेटर ज्यादातर कोष्ठकों से बचने के लिए उपयोग किया जाता है। यह भी एक सख्त संस्करण $! , जो फ़ंक्शन को लागू करने से पहले तर्क का मूल्यांकन करने के लिए मजबूर करता है।

  • . कार्य करता है।

    (f . g) x  ≡  f (g x)  ≡  f $ g x
    
  • >> क्रमिक क्रियायें। जैसे writeFile "foo.txt" "bla" >> putStrLn "Done." पहले एक फ़ाइल पर लिखेंगे, फिर स्क्रीन पर एक संदेश प्रिंट करेंगे।

  • >>= ऐसा ही करता है, जबकि पहली कार्रवाई से निम्नलिखित में पारित होने के तर्क को भी स्वीकार करता है। readLn >>= \x -> print (x^2) उपयोगकर्ता को एक नंबर इनपुट करने के लिए प्रतीक्षा करेगा, फिर उस नंबर के वर्ग को स्क्रीन पर आउटपुट करेगा।

कस्टम ऑपरेटर

हास्केल में, आप अपनी पसंद के किसी भी इन्फिक्स ऑपरेटर को परिभाषित कर सकते हैं। उदाहरण के लिए, मैं सूची-लिविंग ऑपरेटर के रूप में परिभाषित कर सकता हूं

(>+<) :: [a] -> [a] -> [a]
env >+< l = env ++ l ++ env

GHCi> "**">+<"emphasis"
"**emphasis**"

आपको इस तरह के ऑपरेटरों को हमेशा एक निश्चितता की घोषणा करनी चाहिए, जैसे

infixr 5 >+<

(जिसका मतलब होगा >+< कसकर ++ और : रूप में बांधता है)।

Infix ऑपरेटरों के बारे में जानकारी प्राप्त करना

क्योंकि हस्केल में इन्फिक्स बहुत आम हैं, आपको नियमित रूप से उनके हस्ताक्षर आदि देखने की आवश्यकता होगी। सौभाग्य से, यह किसी अन्य फ़ंक्शन के लिए उतना ही आसान है:

  • हास्केल सर्च इंजन हैओ और हुगले का उपयोग इन्फिक्स ऑपरेटरों के लिए किया जा सकता है, जैसे कि कुछ और चीज़ों के लिए जो कुछ लाइब्रेरी में परिभाषित हैं।

  • GHCi या IHaskell में, आप ऑपरेटर के मूल गुणों को सीखने के लिए :i और :t ( i nfo और t ype) निर्देशों का उपयोग कर सकते हैं। उदाहरण के लिए,

    Prelude> :i +
    class Num a where
      (+) :: a -> a -> a
      ...
          -- Defined in ‘GHC.Num’
    infixl 6 +
    Prelude> :i ^^
    (^^) :: (Fractional a, Integral b) => a -> b -> a
          -- Defined in ‘GHC.Real’
    infixr 8 ^^
    

    यह मुझे बताता है कि ^^ + तुलना में अधिक कसकर बांधता है, दोनों अपने तत्वों के रूप में संख्यात्मक प्रकार लेते हैं, लेकिन ^^ को घातांक होने के लिए घातांक और आधार की आवश्यकता होती है।
    कम क्रिया :t को कोष्ठक में ऑपरेटर की आवश्यकता होती है, जैसे

    Prelude> :t (==)
    (==) :: Eq a => a -> a -> Bool
    


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow