我有一个生成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?
答案 0 :(得分:4)
表达式fib (x - 2) list + fib (x - 1) list
需要fib
才能返回int
,因为(+)
需要int
作为参数。
答案 1 :(得分:1)
如果有人在寻找解决方案以获取斐波那契数字列表,这是我的解决方案。直到达到一定值(最大fib 91)为止。
{0, 1, 2, 3, 7, 9}