OCaml创建斐波那契数字列表

问题描述 投票:3回答:2

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

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?

ocaml fibonacci
2个回答
4
投票

0
投票
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)) ;;
© www.soinside.com 2019 - 2024. All rights reserved.