OCaml创建斐波纳契数列表

时间:2011-11-13 18:37:29

标签: ocaml fibonacci

我有一个生成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 =
    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?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

如果有人在寻找解决方案以获取斐波那契数字列表,这是我的解决方案。直到达到一定值(最大fib 91)为止。

{0, 1, 2, 3, 7, 9}