假设我们想要在Haskell中生成列表
我想出了以下解决方案:
但我相信一定有更好的方法。
[0, 1, -1, 2, -2, ...
,那么最优雅的方法是什么?我想出了以下解决方案:
solution = [0] ++ foldr (\(a,b) c->a:b:c) [] zip [1..] $ map negate [1..]
但我相信一定有更好的方法。
flip (-)
不就是subtract
吗? - melpomene<*>
而不是翻转参数版本,那么你也不需要导入Control.Applicative
。 - 4castleid
和negate
交替出现;[id, negate] <*> [1..]
将id
应用于另一个列表的每个元素,然后将其应用于相同的negate
。由于第二个列表是无限的,因此您永远不会得到负数。(更简洁地说,<**>
不仅仅是flip <*>
。) - chepner