我必須寫在Haskell功能如何才能在哈斯克爾列表中的位置:使用也許
safeIndex :: [b] -> Integer -> Maybe b
所以當它得到一個列表中的元素,它會給我們一個Just
當它不是它給我們Nothing
ghci> [1..10] 'safeIndex' 3
Just 4
ghci> [1..10] 'safeIndex' 10
Nothing
,我真的不是在
我必須寫在Haskell功能如何才能在哈斯克爾列表中的位置:使用也許
safeIndex :: [b] -> Integer -> Maybe b
所以當它得到一個列表中的元素,它會給我們一個Just
當它不是它給我們Nothing
ghci> [1..10] 'safeIndex' 3
Just 4
ghci> [1..10] 'safeIndex' 10
Nothing
,我真的不是在
這是從不安全版本的微小變化。
(!!) :: [a] -> Int -> a
[] !! n = error "What"
(a:as) !! 0 = a
(a:as) !! n = as !! (n-1)
而是與error
失敗,我們應該失敗,Nothing
的。這將導致功能的其餘部分不作爲類型檢查退貨類型已經改變
(!!) :: [a] -> Int -> Just a
爲了解決這個問題,我們必須與標籤的成功Just
也。最後,遞歸調用應該仔細考慮。它是否需要任何類型的標籤?這取決於它是否失敗,但我們無法知道,直到我們實際進入遞歸調用...
我會給你提示就如何實現這一成功:
你必須使用遞歸來解決它。當你有一個空的列表,你必須返回Nothing
。如果你找到一個特定索引的元素,你可以將結果包裝在Just
中並返回。我認爲它現在應該直接轉換成Haskell代碼。
據hoogle,它看起來並不像在基礎庫一個存在,但你可以寫一個很容易,但我會說出它!?
:
(!?) :: [a] -> Int -> Maybe a
[] !? _ = Nothing
(x:xs) !? 0 = Just x
(x:xs) !? i = ???
我會讓你填在???
的情況下,你可以從@ Sibi的回答中得到一些提示。請記住,這不處理負指數,如果你要那還有那麼我建議使用守衛來代替:
[] !? _ = Nothing
(x:xs) !? i
| i < 0 = ???
| i == 0 = Just x
| otherwise = ???
這功課嗎? –
作業類..它的演講 – Samara92
培訓將它分級嗎? –