में मामलों मैं तीन कार्यों कि एक सूची के n वें तत्व को खोजने के लिए है:गार्ड बनाम अगर-तो-और कुछ बनाम हास्केल
nthElement :: [a] -> Int -> Maybe a
nthElement [] a = Nothing
nthElement (x:xs) a | a <= 0 = Nothing
| a == 1 = Just x
| a > 1 = nthElement xs (a-1)
nthElementIf :: [a] -> Int -> Maybe a
nthElementIf [] a = Nothing
nthElementIf (x:xs) a = if a <= 1
then if a <= 0
then Nothing
else Just x -- a == 1
else nthElementIf xs (a-1)
nthElementCases :: [a] -> Int -> Maybe a
nthElementCases [] a = Nothing
nthElementCases (x:xs) a = case a <= 0 of
True -> Nothing
False -> case a == 1 of
True -> Just x
False -> nthElementCases xs (a-1)
मेरी राय में, पहले समारोह सबसे अच्छा कार्यान्वयन है क्योंकि यह है सबसे संक्षिप्त लेकिन क्या अन्य दो कार्यान्वयनों के बारे में कुछ भी है जो उन्हें बेहतर बना देगा? और विस्तार से, आप गार्ड का उपयोग करने के बीच कैसे चयन करेंगे, अगर-तो-और बयान, और मामले?
यदि आप 'एलटी के 0 की तुलना करें -> ...' का उपयोग करते हैं तो आप अपने नेस्टेड 'केस' कथन को तोड़ सकते हैं। ईक्यू -> ... | जीटी -> ... ' – rampion
@ रैंपियन: आपका मतलब है कि मामला 1 की तुलना करें ...' – newacct