[英]Recursion help in OCaml
我正在尝试使用Ocaml进行递归函数处理,但是我不断收到相同的错误代码。
let rec get x =
if x > 7 then
get x-7;;
而且我得到了非常有用的错误消息:
错误:此表达式的类型为int,但应为单位类型的表达式
我是OCaml的一个完整的初学者,正在大学里学习它作为一个模块。 这是我的任务之一,我有些困惑!
我本来想通过while循环来完成此操作(因为我是一个主要的命令程序员),但是我无法使其工作,所以我想尝试递归!
谢谢
此代码有两个问题。 首先, 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
希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.