使用printf时出现ocaml类型错误

时间:2014-10-18 13:24:01

标签: functional-programming ocaml

open Printf;;
let rec iterate r x_init i =
    if i = 1
            then x_init
    else
            let x = iterate r x_init (i-1) in
            let y = r * x in y;;

iterate 2 3 4;;

上面的代码不会产生任何警告或错误。刚刚将printf添加到x_init和y。现在它的投掷错误。

我知道它的类型,但不知道如何纠正它。

1 个答案:

答案 0 :(得分:1)

在这个问题上没有足够的信息来正确回答它。您应该包含有问题的代码,以便我们可以看到它是什么。与此同时,我有一个猜测。

我怀疑您正在添加如下的printf语句:

let rec iterate r x_init i =
  if i = 1 then
    printf "x_init: %d\n" x_init;
    x_init
  else
    ...

将缩短if短并打破代码。你需要像begin ... end这样包装它:

let rec iterate r x_init i =
  if i = 1 then begin
    printf "x_init: %d\n" x_init;
    x_init;
  end else
    ...