为了账号安全,请及时绑定邮箱和手机立即绑定

有人可以用外行的术语向我解释这个折叠示例吗?

有人可以用外行的术语向我解释这个折叠示例吗?

慕桂英3389331 2021-07-01 14:11:40
我试图确切地了解这个功能是如何运作的,但无法在我的大脑中弄清楚。请您能显示代码的分步过程吗?我一直坐在这里,试图在我的电脑上使用计算器在我的脑海中弄清楚这个例子,并在我的脑海中多次运行代码,但它只是没有加起来。双关语不是故意的。constructor(values) {  this.values = values || []}const list = new List([1,2,3,4])expect(list.foldl((acc, el) => el / acc, 24)).toEqual(64);foldl(fn, initialValue) {  let acc = initialValue;  for (let i in this.values) {    acc = fn(acc, this.values[i]);  }  return acc; // 64... HOW??!}好的,这就是我如何在脑海中运行它。请你向我解释为什么我错了,并告诉我伪代码中什么是正确的,就像我在下面所做的那样。```// accumulator is 24 and therefore we divide the first element of the array which is 1 by 24 which equals .041666667// the accumulator now ACCUMULATES which means 24 plus .041666667 is equal to 24.041666667// now the accumulator is 24.041666667 and we divide the second element of the array which is 2 by 24 which equals .083333333// the accumulator which is 24.041666667 now adds .083333333 which equals 24.874999997// now the accumulator is 24.874999997 and we divide the third element of the array which is 3 by 24.874999997 which equals .120603015 等等...我在这里缺少什么?
查看完整描述

1 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

积累并不意味着增加。这意味着运行您传入的函数foldl。此外,24 的值仅在第一次使用;之后,累加意味着它使用上次的返回值。这是正确的值序列:


acc = 24

el = 1

acc = 1/24

el = 2

acc = 2/(1/24) = 48

el = 3

acc = 3/48 = 1/16

el = 4

acc = 4/(1/16) = 64


查看完整回答
反对 回复 2021-07-08
  • 1 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信