要選擇列表的第k個元素,只需使用!!
。第一個元素是指數0
selectN = (!!)
ghci> let test = "abracadabra"
ghci> test !! 0
ghci> 'a'
ghci> test !! 9
ghci> 'r'
,但要小心的indexOutOfRange
異常
ghci> test !! 11
*** Exception: Prelude.(!!): index too large
版:使功能安全
它可以寫一個safeSelectN
處理錯誤例外並允許程序安全地繼續而不需要任何IO
操作。要做到這一點需要進行以下修改
safeSelectN :: Int -> [a] -> [a]
safeSelectN n xs = if null xs || length xs < n then [] else [xs !! n]
在這種情況下,通過接收空列表作爲結果來檢測錯誤。
ghci> safeSelectN 3 ""
[]
ghci> safeSelectN 0 ""
[]
ghci> safeSelectN 3 "abcd" --like this
['d']
因此,當結果正確時,您不會以第k個元素結束,而只會包含僅包含第k個元素的列表。
這是什麼問題? – jozefg
我似乎無法弄清楚如何獲得正確的功能。目前有類似 'selectN :: Int - > [a] - >' 'selectN i list =(i)!!列表' 其中引發無法匹配預期類型'[a]',實際類型爲'Int' 在'(!!)'的第一個參數中,即'(i)' – kqualters
沒關係,用selectN :: Int - > [a] - > selectN i list = list !! (i-1) – kqualters