首页 文章

OCaml创建斐波纳契数列表

提问于
浏览
3

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

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?

1 回答

  • 4

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

相关问题