我正在OCaml中编写一个函数以将x提高到y的幂。 我的代码是:
#let rec pow x y =
if y == 0 then 1 else
if (y mod 2 = 0) then pow x y/2 * pow x y/2 else
x * pow x y/2 * pow x y/2;;
当我尝试执行它时,在第一行中出现语法错误,但是并没有告诉我它是什么。
答案 0 :(得分:1)
编写代码时,您是否键入了#
? #
只是OCaml REPL输出以提示输入的字符。它不是代码的一部分。您不应该键入它。
还有一些其他错误应解决:
==
是OCaml中的物理相等性。 =
是结构平等。尽管两者对于未装箱类型(例如int
)的工作方式都是相同的,但最好使用y = 0
。请注意,在表达式=
中使用建议的相等性y mod 2 = 0
。y/2
周围加上括号。 pow x y/2
解析为(pow x y) / 2
,但您想要pow x (y / 2)
。