Ocaml использование рекурсивной функции - PullRequest
0 голосов
/ 13 октября 2019

Мне нужно написать рекурсивную функцию, которая вычисляет сумму всех натуральных чисел, меньших, чем n.

Моя функция работает на верхнем уровне, но мне не удается использовать ее в сценарии:

let rec sum x = 
    if x = 0 then 0 else x + sum (x - 1)

let () = 
    Printf.printf "%d\n" sum 4

При компиляции я получаю следующую ошибку:

Error: This expression has type
         ('a -> 'b, out_channel, unit, unit, unit, 'a -> 'b)
         CamlinternalFormatBasics.fmt
       but an expression was expected of type
         ('a -> 'b, out_channel, unit, unit, unit, unit)
         CamlinternalFormatBasics.fmt
       Type 'a -> 'b is not compatible with type unit

для последней строки.

1 Ответ

1 голос
/ 13 октября 2019

Вам не хватает скобок. Вы хотите это:

let () = 
    Printf.printf "%d\n" (sum 4)

Это не сработало бы и на верхнем уровне.

Без скобок вы просите передать sum (сама ваша функция) в качестве параметра printf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...