小编sto*_*125的帖子

当找到列表的倒数第二个元素时,为什么在这些当中使用`last`最快?

下面提供了3个函数,这些函数可以找到列表中的最后一个但第二个元素。一个使用last . init似乎比其他人快得多。我似乎不知道为什么。

为了进行测试,我使用了输入列表[1..100000000](一亿)。最后一个几乎立即运行,而其他则需要几秒钟。

-- slow
myButLast :: [a] -> a
myButLast [x, y] = x
myButLast (x : xs) = myButLast xs
myButLast _ = error "List too short"

-- decent
myButLast' :: [a] -> a
myButLast' = (!! 1) . reverse

-- fast
myButLast'' :: [a] -> a
myButLast'' = last . init
Run Code Online (Sandbox Code Playgroud)

haskell

10
推荐指数
1
解决办法
134
查看次数

标签 统计

haskell ×1