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