OCaml中的递归帮助

时间:2014-10-14 12:58:11

标签: recursion ocaml

我正在尝试使用Ocaml创建一个递归函数,但我一直得到相同的错误代码。

let rec get x =
if x > 7 then
get x-7;;

我收到了非常有用的错误消息:

  

错误:此表达式的类型为int,但需要表达式   类型单位

我是OCaml的初学者,并在大学学习模块。 这是我的任务之一,我有点卡住了!

我原本想通过一个while循环来实现它(因为我是一个占主导地位的程序员),但我无法让它工作,所以我想我会尝试递归!

由于

1 个答案:

答案 0 :(得分:7)

此代码存在两个问题。首先,x-7的间距表示您希望将x - 7传递给get,但它实际上会被解析为(get x) - 7。用括号很容易解决这个问题:

let rec get x =
  if x > 7 then get (x - 7)

第二个问题是你没有if的第二只手臂,所以这个功能没有多少机会返回任何东西。 (单臂if被认为是unit类型,仅对效果有用。)

如果x小于7,您可能想要返回一些内容,可能是:

let rec get x =
  if x > 7 then get (x - 7) else x

使用while循环编写它是可能的,但是您应该理解OCaml中的变量不是可变位置,只是名称。您必须明确地介绍和操作可变位置:

let get x =
  let y = ref x in
  while !y > 7 do
    y := !y - 7;
  done;
  !y

希望有所帮助。