Мне нужно закодировать список в OCaml. Команда: encode ['a', 'a', 'b', 'b', 'b', 'c'] ;; должен вернуть [(2, 'a'); (3, 'b'); (1, 'c')]
Теперь у меня есть эта функция:
let encode list =
let rec encodeHelper list acc = match list with
| [] -> []
| head :: [] -> (1, head) :: []
| head :: headNext :: tail -> if (head = headNext) then encodeHelper (headNext :: tail) (acc + 1)
else (acc, head) :: encodeHelper (headNext :: tail) acc
in encodeHelper list 1
;;
Но возвращается:
- : (int * (char * char * char * char * char * char)) list =
[(1, ('a', 'a', 'b', 'b', 'b', 'c'))]