क्या लैम्ब्डा कार्यों पर गार्ड रखना संभव है?लैम्ब्डा कार्यों पर हास्केल गार्ड?
उदाहरण के लिए:
\k
| k < 0 -> "negative"
| k == 0 -> "zero"
| otherwise -> "positive"
क्या लैम्ब्डा कार्यों पर गार्ड रखना संभव है?लैम्ब्डा कार्यों पर हास्केल गार्ड?
उदाहरण के लिए:
\k
| k < 0 -> "negative"
| k == 0 -> "zero"
| otherwise -> "positive"
नहीं। निकटतम प्रत्यक्ष अनुवाद कुछ
\k -> case() of
_ | k < 0 -> "negative"
| k == 0 -> "zero"
| otherwise -> "positive"
मुझे लेम्बास को छोटा और मीठा रखना पसंद है ताकि पाठक के दृश्य प्रवाह को तोड़ने न पाए। एक समारोह के लिए जिसका परिभाषा वारंट गार्ड के लिए काफी हद तक भारी है, क्यों इसे where
खंड में चिपकाएं?
\k -> if
| k < 0 -> "negative"
| k == 0 -> "zero"
| otherwise -> "positive"
कौन सा कम से कम और अधिक case
का उपयोग कर विकल्प की तुलना में को देखने के लिए सुखद है:
showSign k = mysign ++ " (" ++ show k ++ ")"
where
mysign
| k < 0 = "negative"
| k == 0 = "zero"
| otherwise = "positive"
GHC 7.6.1 के रूप में वहाँ एक विस्तार MultiWayIf
कहा जाता है आप निम्नलिखित लिखने देता है।
\case
"negative" -> -1
"zero" -> 0
"positive" -> 1
_ -> error "invalid sign"
इन एक्सटेंशन मानक हास्केल का हिस्सा है, हालांकि नहीं हैं, और शीर्ष पर एक {-# LANGUAGE LambdaCase #-}
या {-# LANGUAGE MultiWayIf #-}
pragma के माध्यम से स्पष्ट रूप से सक्षम किया जाना आवश्यक:
पैटर्न मिलान के लिए, वहाँ एक संबंधित विस्तार LambdaCase
कहा जाता है फ़ाइल का, या ध्वज -XLambdaCase
या -XMultiWayIf
के साथ संकलित करके।
एक सुरुचिपूर्ण और संक्षिप्त तरीके LambdaCase साथ यह करने के लिए:
{-# LANGUAGE LambdaCase #-}
\case k | k < 0 -> "negative"
| k == 0 -> "zero"
| otherwise -> "positive"
या
\case
k | k < 0 -> "negative"
| k == 0 -> "zero"
| otherwise -> "positive"
एक मामला है जब मैं इसका इस्तेमाल किया, एक EOF त्रुटि को पकड़ने के लिए:
{-# LANGUAGE ScopedTypeVariables #-}
o <- hGetContents e `catch` (\case (e :: IOException) | isEOFError e -> return "")
कभी 'का उपयोग करने पर _''() 'के बारे में सोचा: डी –
आप निश्चित रूप से भी बात को लेकर इसका इस्तेमाल कर सकते हैं, लेकिन'() 'छोटी और शायद कम से कम भ्रामक है। –
आप 'चयन' फ़ंक्शन http://www.haskell.org/haskellwiki/Case#Using_functions पर भी विचार कर सकते हैं – singpolyma