【发布时间】:2020-02-07 04:18:29
【问题描述】:
我有一个返回浮点列表的函数 (mergeall)。我想计算此列表中每对相邻元素的差异。例如:
[1.1,2.2,3.3,4.4,5.5,6.6]
do 1.1-2.2, 2.2-3.3,3.3-4.4...
return list of all difference
所以,这应该传入一个列表并返回一个列表。问题是:
- 如何使用“mergeall”中的列表?
- 如何执行上述算法? 有人可以帮我吗?谢谢!
【问题讨论】:
我有一个返回浮点列表的函数 (mergeall)。我想计算此列表中每对相邻元素的差异。例如:
[1.1,2.2,3.3,4.4,5.5,6.6]
do 1.1-2.2, 2.2-3.3,3.3-4.4...
return list of all difference
所以,这应该传入一个列表并返回一个列表。问题是:
【问题讨论】:
differences fs = zipWith (-) fs (tail fs)
【讨论】:
differences = ap (zipWith (-)) tail
(e ->) monad。函数组合(.) 在这里并没有完全删除它,因为相同的参数在不同的地方提供了两次。
2.2-1.1),pointfree 版本看起来像zipWith (-) =<< tail
ap = liftM2 ($) 这里将函数应用程序提升到其第一个参数 zipWith (-) 的第二个参数,但不会与 tail 混淆,并且 monad 规定所有函数都适用于相同的值。可爱的。 :)
使用Control.Applicative 的无点解决方案:
differences = zipWith (-) <*> tail
编者注:我不明白为什么这篇文章被所有者删除。这是一个很好的答案。
【讨论】: