我试图用Ocaml做一个递归函数,但我一直得到相同的错误代码.
let rec get x =
if x > 7 then
get x-7;;
Run Code Online (Sandbox Code Playgroud)
我得到了非常有用的错误信息:
错误:此表达式的类型为int,但表达式的类型为unit
我是OCaml的初学者,并在大学学习模块.这是我的任务之一,我有点卡住了!
我原本想通过一个while循环来做(因为我是一个占主导地位的程序员),但我无法让它工作,所以我想我会尝试递归!
谢谢
这段代码存在两个问题.首先,间距x-7表示您要传递x - 7给get它,但它实际上将被解析为(get x) - 7.用括号很容易修复:
let rec get x =
if x > 7 then get (x - 7)
Run Code Online (Sandbox Code Playgroud)
第二个问题是你没有第二只手臂if,因此该功能没有太多机会返回任何东西.(一只手臂if被认为是类型unit,只对效果有用.)
如果x小于7,你可能想要返回一些东西,也许:
let rec get x =
if x > 7 then get (x - 7) else x
Run Code Online (Sandbox Code Playgroud)
用while循环编写它是可能的,但你应该理解OCaml中的变量不是可变位置,只是名称.您必须明确地引入和操作可变位置:
let get x =
let y = ref x in
while !y > 7 do
y := !y - 7;
done;
!y
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.