我不明白这个问题。
实现一个 product() 函数,该函数使用传递的函数包装一个序列。也就是说,您需要递归地应用传递的函数,而不是硬编码的操作,例如加法。
例子:
3 == product(1, 2, -> (first, second) { first + second }) # sum 6 == product(1, 3, -> (first, second) { first * second }) # multi
我不明白这个问题。
实现一个 product() 函数,该函数使用传递的函数包装一个序列。也就是说,您需要递归地应用传递的函数,而不是硬编码的操作,例如加法。
例子:
3 == product(1, 2, -> (first, second) { first + second }) # sum 6 == product(1, 3, -> (first, second) { first * second }) # multi
这项任务并不难,学习的重点是自己找到解决方案。因此,让我先尝试将您推向正确的方向,并且在消息的末尾,我仍然会给出答案,如果您自己无法解决,请使用它,但一定要分析解决方案.
因此,您需要编写一个函数,该函数首先应用于序列的前两个元素,然后应用于函数的最后一个结果和序列的下一个元素。因此,您可以编写,例如,数组中所有元素的总和,或者,例如,找到数组的最大元素(如果传递的函数比较两个数字并返回最大值)。Ruby 已经有一个方法可以为你做这件事。这是减少。您可以以正确的方式应用它,但自己编写产品会更有趣。例如,尝试使用循环遍历整个集合,从第二个元素开始。并将第一个元素写入一个变量,该变量将在每次迭代时存储结果。
从你给出的例子来看,你需要的不是一个集合,而是一个范围,因为
仅当您的函数适用于 1、2 和 3 时才会成立。 (1 2 3 = 6)。所以这里是我的解决方案(非reduce版本我就留下,这对学习很重要,我就留给你!):
现在调用:
将返回预期的 6。
快乐学习!