【问题标题】:Haskell: Calculate differences of every pair of adjacent elements in a listHaskell:计算列表中每对相邻元素的差异
【发布时间】: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

所以,这应该传入一个列表并返回一个列表。问题是:

  1. 如何使用“mergeall”中的列表?
  2. 如何执行上述算法? 有人可以帮我吗?谢谢!

【问题讨论】:

    标签: list haskell


    【解决方案1】:
    differences fs = zipWith (-) fs (tail fs)
    

    【讨论】:

    • 或pointfree版本:differences = ap (zipWith (-)) tail
    • @JeffBurdges 实际上,涉及到一些提升——特别是进入(e ->) monad。函数组合(.) 在这里并没有完全删除它,因为相同的参数在不同的地方提供了两次。
    • @augustss:这就是为什么我将它作为评论而不是作为正确答案的一部分提供的原因。我发现看到各种函数的无点版本很有趣,但它们通常更迟钝。
    • 顺便说一下,如果你想要相反的差异(例如2.2-1.1),pointfree 版本看起来像zipWith (-) =<< tail
    • 啊,ap = liftM2 ($) 这里将函数应用程序提升到其第一个参数 zipWith (-) 的第二个参数,但不会与 tail 混淆,并且 monad 规定所有函数都适用于相同的值。可爱的。 :)
    【解决方案2】:

    使用Control.Applicative 的无点解决方案:

    differences = zipWith (-) <*> tail
    

    编者注:我不明白为什么这篇文章被所有者删除。这是一个很好的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多