我有一个生成斐波纳契数的函数:
let rec fib n =
match n with
| (0 | 1) -> 1
| x when x > 0 -> (fib (x-2) + fib (x-1))
| _ -> raise (Invalid_argument "Negative value supplied to fib");;
但我真正想要的是它返回所述数字列表 . 我试过这个:
let rec fib n list =
match n with
| (0 | 1) -> 1 :: []
| x when x > 0 -> (fib (x-2) list + fib (x-1) list) :: list
| _ -> raise (Invalid_argument "Negative value supplied to fib");;
但是ocamlc说
文件“main.ml”,第2行,字符4-174:错误:此表达式具有类型int列表但是表达式需要类型为int
(第2行字符4-174对应于匹配块) . 我希望这返回类型“int list”,为什么它推断类型int?
1 回答
表达式
fib (x - 2) list + fib (x - 1) list
要求fib
返回int
,因为(+)
将int
作为参数 .