我有一个生成斐波那契数的函数:
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?
let fib n =
let rec aux acc n2 n1 = function
| 1 -> acc
| c -> aux ((n2 + n1) :: acc) n1 (n2 + n1) (c - 1)
in
List.rev(aux [1; 0] 0 1 (n - 1))
;;