我想在haskell中創建一個函數,它給了我在位置x的項目。列表函數,給我在位置x的項目
例如:
[1..10] `give` 3 => should give me 4
在java中,這是沒有問題的,但我怎麼能處理這個在Haskell
give :: [b] -> Integer -> Maybe b
give ????
我想在haskell中創建一個函數,它給了我在位置x的項目。列表函數,給我在位置x的項目
例如:
[1..10] `give` 3 => should give me 4
在java中,這是沒有問題的,但我怎麼能處理這個在Haskell
give :: [b] -> Integer -> Maybe b
give ????
嘗試了這一點,它爲我工作。
give :: [b] -> Integer -> Maybe b
give [] _ = Nothing
give (x:xs) 0 = Just x
give (x:xs) index = give xs (index - 1)
你能解釋一下嗎? ;)我不知道如何編寫正確的函數 – basti12354
無法與實際類型爲'Integer'的預期類型'Int'匹配 在'(!!)'的第二個參數中,即'index' 在表達:列表!!索引 在「safeIndex」公式中: safeIndex list index = list !!指數 – basti12354
我傾向於在可能時避免顯式遞歸。函數組合產生更易讀的代碼,並且組合標準庫函數產生可靠的代碼。因此,這裏是我的版本:
import Data.Maybe
give :: [a] -> Integer -> Maybe a
give xs n = listToMaybe $ drop n xs
說明:drop n xs
下降第一n
元素,所以drop 3 [1..5]
回報[4,5]
。 listToMaybe
返回Nothing
爲空列表,Just x
爲(x:_)
。
只是除了上述那些另一個有趣的解決方案:
give xs n = head $ iterate tail xs !! n
'give'不能給你'3'如果它提供了一個'也許B'。 –
這只是一個打字錯誤。謝謝;)現在它是正確的! – basti12354
它也不能給你4。 –