2014-02-09 2 views
0

Мне нужно разбить список, например [1;2;3;4;5], на [[1;2]; [3;4]; [5]] в OCaml.разбиение списка на новый список из двух соседних элементов

я написал следующую функцию, но он дает мне ошибку (Error: Это выражение имеет тип «список, но выражение Ожидалось типа» а тип переменной «а происходит внутри» список)

let rec getNewList l = 
    match l with 
    [] -> failwith "empty list" 
    | [x] -> [x] 
    | x::(y::_ as t) -> [x;y] :: getNewList t;; 

Что мне не хватает? как я могу это исправить?

ответ

1

Вам нужна функция типа 'a list -> 'a list list. Однако вторая ветка вашего матча возвращает что-то типа 'a list.

В качестве побочного комментария вы не должны считать его ошибкой, если входной файл является пустым. Для этого случая есть совершенно естественный ответ. В противном случае у вас будет много лишних проблем с записью вашей функции.

1

Вы находитесь недалеко от решения. Три вещи:

  • если список пуст, вы определенно хотите, чтобы ваш результат будет пустой список
  • второй случай должен быть [x] -> [[x]]
  • для основного дела, сколько раз y появиться в результате ?
+0

как раз один раз. – user1787222

Смежные вопросы