繁体   English   中英

OCaml中的递归帮助

[英]Recursion help in OCaml

我正在尝试使用Ocaml进行递归函数处理,但是我不断收到相同的错误代码。

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

而且我得到了非常有用的错误消息:

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

我是OCaml的一个完整的初学者,正在大学里学习它作为一个模块。 这是我的任务之一,我有些困惑!

我本来想通过while循环来完成此操作(因为我是一个主要的命令程序员),但是我无法使其工作,所以我想尝试递归!

谢谢

此代码有两个问题。 首先, x-7的间距表示您希望传递x - 7get ,但实际上它会被解析为(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

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM