2014-05-05 32 views
0

我想在haskell中創建一個函數,它給了我在位置x的項目。列表函數,給我在位置x的項目

例如:

[1..10] `give` 3 => should give me 4 

在java中,這是沒有問題的,但我怎麼能處理這個在Haskell

give :: [b] -> Integer -> Maybe b 
    give ???? 
+0

'give'不能給你'3'如果它提供了一個'也許B'。 –

+0

這只是一個打字錯誤。謝謝;)現在它是正確的! – basti12354

+0

它也不能給你4。 –

回答

1

嘗試了這一點,它爲我工作。

give :: [b] -> Integer -> Maybe b 
give [] _ = Nothing 
give (x:xs) 0 = Just x 
give (x:xs) index = give xs (index - 1) 
+0

你能解釋一下嗎? ;)我不知道如何編寫正確的函數 – basti12354

+0

無法與實際類型爲'Integer'的預期類型'Int'匹配 在'(!!)'的第二個參數中,即'index' 在表達:列表!!索引 在「safeIndex」公式中: safeIndex list index = list !!指數 – basti12354

2

我傾向於在可能時避免顯式遞歸。函數組合產生更易讀的代碼,並且組合標準庫函數產生可靠的代碼。因此,這裏是我的版本:

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:_)

0

只是除了上述那些另一個有趣的解決方案:

give xs n = head $ iterate tail xs !! n