我正在尝试使用Ocaml创建一个递归函数,但我一直得到相同的错误代码。
let rec get x =
if x > 7 then
get x-7;;
我收到了非常有用的错误消息:
错误:此表达式的类型为int,但需要表达式 类型单位
我是OCaml的初学者,并在大学学习模块。 这是我的任务之一,我有点卡住了!
我原本想通过一个while循环来实现它(因为我是一个占主导地位的程序员),但我无法让它工作,所以我想我会尝试递归!
由于
答案 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
希望有所帮助。