【问题标题】:Haskell foldl1 how does it work?Haskell foldl1 它是如何工作的?
【发布时间】:2018-03-06 04:02:57
【问题描述】:

我有代码

g :: Int->Int->Int
g x y = x*2 - y

然后如果我调用 foldl1 g [4,3,2,1] 它返回 15,但我不明白它如何返回 15,谁能解释我为什么会这样?

【问题讨论】:

  • 元问题:你是this now-deleted question的作者吗?如果是这样,我建议您重新发布其中的foldPairs 部分——关于它有一些相当有趣的观点,我正要完成一个涵盖它们的答案......
  • 当您删除时,我也在对您的问题的答案进行中期编辑。

标签: haskell


【解决方案1】:

foldl1 首先将函数应用于列表的前两个元素,然后获取结果并将函数应用于它和第三个元素,然后获取结果并将函数应用于它和第四个元素,然后结果和第五个元素,然后是第六个元素,依此类推,直到列表结束。

所以:

Step 1:  g 4 3 = 4*2 - 3 = 5
Step 2:  g 5 2 = 5*2 - 2 = 8
Step 3:  g 8 1 = 8*2 - 1 = 15

【讨论】:

  • 一个有用的身份(我认为)是foldl1 f (x:xs) == foldl f x xsfoldl f [] 未定义)。
  • @chepner 虽然这对于经验丰富的程序员(或数学家)来说是一个有用的身份,但我认为这对 OP 几乎没有帮助,通过他们的问题来判断他们的技能/知识水平。
  • 我不确定问题是关于折叠方面,还是特别是foldl1
  • 你回答这个问题的方式听起来好像它要求列表至少有 2 个元素,而它只需要 1 个。“步骤 0”将只取第一个元素。跨度>
  • True @PeterHall,那会更正确。但我相信教育较少。问题集中在特定的输入上,而不是函数的一般工作原理,而且 OP 显然非常缺乏经验。
猜你喜欢
  • 1970-01-01
  • 2012-04-23
  • 2015-04-02
  • 1970-01-01
  • 2011-05-22
  • 2016-12-06
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
相关资源
最近更新 更多