मेरे पास तीन कार्य हैं जो किसी सूची के nth तत्व को खोजते हैं:
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)
मेरी राय में, पहला कार्य सबसे अच्छा कार्यान्वयन है क्योंकि यह सबसे संक्षिप्त है। लेकिन क्या अन्य दो कार्यान्वयन के बारे में कुछ ऐसा है जो उन्हें बेहतर बना देगा? और विस्तार से, आप गार्ड का उपयोग करने के बीच का चयन कैसे करेंगे, यदि-तब-तब बयान, और मामले?
case compare a 1 of ...
case
बयान करता है, तो आप के लिए इस्तेमाल कियाcase compare a 0 of LT -> ... | EQ -> ... | GT -> ...