【问题标题】:Recursion help in OCamlOCaml 中的递归帮助
【发布时间】:2014-12-09 06:50:18
【问题描述】:

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

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

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

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

我是 OCaml 的完全初学者,并且正在为大学的一个模块学习它。 这是我的一项任务,我有点卡住了!

我最初想通过 while 循环来实现,(因为我是一个主要的命令式程序员),但我无法让它工作,所以我想我会尝试递归!

谢谢

【问题讨论】:

    标签: recursion ocaml


    【解决方案1】:

    这段代码有两个问题。首先,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
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多