OCaml创建斐波那契数列表

OCaml创建斐波那契数列表,ocaml,fibonacci,Ocaml,Fibonacci,我有一个生成斐波那契数的函数: 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 =

我有一个生成斐波那契数的函数:

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");;
但是奥恰姆尔茨说

文件“main.ml”,第2行,字符4-174: 错误:此表达式的类型为int list 但表达式应为int类型


(第2行字符4-174对应于匹配块)。我想让它返回类型“int list”,为什么它会推断类型int?

表达式
fib(x-2)list+fib(x-1)list
要求
fib
返回
int
,因为
(+)
int
作为参数。

如果有人想找到一个解决方案来获得斐波那契数列表,这里是我的解决方案。这将一直工作到特定值(最大fib 91)

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))
;;