【发布时间】:2016-08-08 19:22:37
【问题描述】:
如何在没有递归的情况下从列表中获取连续对(元组)的列表?
例如:[1, 2, 3, 4] 将是 [(1, 2), (2, 3), (3, 4)]
【问题讨论】:
-
另外,
(\xs-> [(x,y) | (x:y:_)<- tails xs])。tails是用递归定义的,但zip也是如此。
如何在没有递归的情况下从列表中获取连续对(元组)的列表?
例如:[1, 2, 3, 4] 将是 [(1, 2), (2, 3), (3, 4)]
【问题讨论】:
(\xs-> [(x,y) | (x:y:_)<- tails xs])。 tails 是用递归定义的,但 zip 也是如此。
\xs -> zip xs $ tail xs 或zip <*> tail。
【讨论】:
zip<*>tail。我实际上不是这些函数函子 hack 的忠实粉丝,但我不得不承认这里非常好。
ap 现在有点过时了,因为 Applicative 是 Monad 的超类(至少在 GHC 中,并且假设它被 Haskell 2014 标准采用)。
((->) r) 的函数的实例,您有 <*> f g x = f x (g x),显然也称为S 组合子。