什么是 nim 中的 reduce 等价物?

Jun*_*ius 3 nim-lang

是否有proc与 Pythonreduce或 Javascript等效的内置函数Array.reduce

Rei*_*nds 5

有模板foldlfoldrsequtils模块。例子:

import sequtils

proc factorial(n: int): int =
  foldl(1..n, a * b, 1)

echo factorial(10)
Run Code Online (Sandbox Code Playgroud)

作为模板,它们不采用 proc 参数,而是采用内联表达式,其中ab是操作数。该模板适用于具有items迭代器的任何类型的集合,例如数组、序列或范围(如上例所示)。

  • 事实上,我不能使用匿名 `proc` 作为参数,而只能使用带有操作数的内联表达式,这确实使 nim 不太适合函数式编程,不是吗? (2认同)
  • 那么你的内联表达式可以是`doSomething(a, b)`甚至是`somethingElse(b, 10, a+b,nested(b))`。基本上,它所做的就是消除您放入它创建的循环体中的任何内容。这意味着您可以使用那里的任何东西,而不仅仅是具有特定签名的程序。要在 Python 中实现相同的功能,您需要使用包装函数,但函数调用不是免费的,因此您会增加开销,这既更简单又更高效。我想说 Nim 实际上更加功能友好,只需看看 https://github.com/zero-functions (2认同)