OCaml создает список чисел Фибоначчи - PullRequest
3 голосов
/ 13 ноября 2011

У меня есть функция, которая генерирует числа Фибоначчи:

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-174 соответствуют блоку соответствия).Я хочу, чтобы это возвращало тип "int list", почему это выводит тип int?

1 Ответ

4 голосов
/ 13 ноября 2011

Выражение fib (x - 2) list + fib (x - 1) list требует fib для возврата int, потому что (+) принимает int в качестве параметров.

...