Ошибка типа Ocaml: это выражение имеет тип 'a *' b, но ожидалось выражение типа 'c list - PullRequest
0 голосов
/ 26 января 2020

Мне необходимо вывести пару списков, и я не понимаю, почему возвращаемая пара имеет неправильный тип.

let rec split l = match l with
  | [] -> []
  | [y] -> [y]
  | x :: xs ->
      let rec helper l1 acc = match l1 with
        | [] -> []
        | x :: xs ->
            if ((List.length xs) = ((List.length l) / 2)) then
                (xs, (x :: acc))
            else helper xs (x :: acc)
      in helper l []

1 Ответ

1 голос
/ 26 января 2020

(Пожалуйста, найдите время, чтобы скопировать / вставить и отформатировать ваш код на SO, а не указывать ссылку на изображение. Это значительно облегчает помощь и делает ее более полезной в будущем.)

первый случай match в вашей вспомогательной функции не возвращает пару. Все случаи match должны возвращать один и тот же тип (конечно).

Обратите внимание, что случаи вашего крайнего match также бывают разных типов (если вы предполагаете, что helper возвращает пара).

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