【发布时间】:2017-03-24 15:40:01
【问题描述】:
我的代码给出了想要的结果,但我想知道是否有更好的编码方法。这是给定的示例:
pair [ 1 , 2 , 3 , 4 , 5 , 6 , ... ]
[ [ 1 , 2 ] , [ 3 , 4 ] , [ 5 , 6 ] , ... ]
和给定的代码:
pair::[a] -> [[a]]
pair =
我的解决方案:
pair :: [a] -> [[a]]
pair (x:y:xs) = ((x:y:[]):[]) ++ pair xs
【问题讨论】:
-
如果可以使用
:,则不要连接列表:++在 O(n) 中工作(n 的大小与第一个list) 而:在 O(1) 中工作。 -
@WillemVanOnsem 但是如果第一个列表的大小是 O(1) 就像在任何情况下,您都可以轻松地将
(++)替换为(:)然后(++)也是O(1)。因此,虽然(:)可能是一个比(++)快的常数因子,但它们是相同的。 -
你没有提出问题。
标签: list haskell optimization infinite