【发布时间】:2020-01-26 07:14:18
【问题描述】:
我正在尝试编写一个函数,它接受 x 并将其提升到 n 的幂。
如果 x 和 n 是整数,则此代码有效:
let rec pow x n =
if n == 0 then 1 else
if (n mod 2 = 0) then pow x (n/2) * pow x (n/2) else
x * pow x (n/2) * pow x (n/2);;
如果我尝试在 x 是浮点数的情况下更改代码以使其正常工作,它就会崩溃:
let rec float_pow x n =
if n == 0.0 then 1.0 else
if n mod_float 2.0 == 0.0 then float_pow x (n /. 2) *. float_pow x (n /. 2) else
x *. float_pow x (n /. 2) *. float_pow x (n /. 2);;
我收到此错误:
Error: This expression has type float
This is not a function; it cannot be applied.
我该怎么办?
【问题讨论】:
-
对于OCaml中只想将值升为指数的,对应的操作符在OCaml中称为
**,因此x^n编码为x ** n,例如2.0 ** 3.14.
标签: recursion functional-programming ocaml