难以理解 OCAML 幂函数

Trouble understanding OCAML power function

我正在尝试理解这个 Caml 函数来计算数字的 n 次方。

let rec iterate n f d =
    if n = 0 then d
    else iterate (n-1) f (f d)

let power i n =
    let i_times a = a * i in
        iterate n i_times 1

我理解它在概念上的作用,但我无法理解 i_times 位。

据我了解,i_times 取值 a 和 returns a*i,其中 i 在调用时传递给 power它。在定义了 i_times 的表达式中,它后面跟着 1,所以这是否意味着 i_times 1 一起计算为 1*i

在这种情况下,我看不出 3 个参数是如何传递给 iterate 的。为什么它最终不只是 2,即 ni_times 1

我知道这是一个非常基本的函数,但我才刚刚开始使用函数式编程,我想理解它。

基本上你问的是 OCaml 如何解析一系列并列值。

这个表达式:

f a b c

被解释为对传递 3 个单独参数的函数 f 的调用。它不是这样解析的:

f a (b c)

这会将 2 个参数传递给 f。

所以确实,三个参数被传递给 iterate。参数列表中没有子表达式,只有三个单独的参数。

为什么你没有想到在调用 iterate 之前会计算子表达式 n i_times?原因(我怀疑)是您知道 n 不是函数。但是语言的解析不依赖于事物的类型。如果您编写 (n i_times)(带括号),它将被解析为对 n 的函数调用。 (当然,这会是一个错误。)