如何在Haskell中按索引访问类似于此C代码的列表?
int a[] = { 34, 45, 56 }; return a[1];
看这里,所用的运算符是!!。
!!
即[1,2,3]!!1给你2,因为列表是0索引的。
[1,2,3]!!1
2
就我个人而言,我不能理解不返回Maybe类型的at-index访问器如何作为惯用的Haskell可以接受的。
[1,2,3]!!6
会给您一个运行时错误。如果!!
有类型,可以很容易地避免它[a] -> Int -> Maybe a
。我们拥有Haskell的根本原因是为了避免此类运行时错误!这是一个权衡。他们选择的符号可能是他们可能拥有的最令人震惊的符号。因此,我认为该想法是允许将其用于极端情况,但使其成为非惯用语。
itemOf :: Int -> [a] -> Maybe a; x `itemOf` xs = let xslen = length xs in if ((abs x) > xslen) then Nothing else Just (xs !! (x `mod` xslen))
。请注意,这将在无限列表上造成灾难性的失败。!!
是部分功能,因此不安全。看看下面的评论,并使用lens
stackoverflow.com/a/23627631/2574719