Разработка на коленке

"тут должна быть красивая цитата о программировании"

How to split string in OCaml by delimiter

2016-11-15 21:54
How to split string in OCaml by delimiter

Из-за того, что на codingame доступна только стандартная библиотека OCaml, да и то не вся, приходится писать свои мелкие функции. С каждой итерацией функции всё больше похожи на что-то пригодное для продакшена.

В этот раз я снова написал функцию для разбиения строки на подстроки.

let split str ~on:delim =
    let open String in

    let rec _split acc str =
        try
            let pos = index str delim in
            _split ((sub str 0 pos) :: acc) (sub str (pos + 1) ((length str) - pos - 1))
        with Not_found -> str :: acc
    in

   _split [] str |> List.filter (fun s -> s <> "") |> List.rev

let () =
    "This is a long message with two spaces after next word  and still there is shouldn't be an empty string in a list "
    |> split ~on:' '
    |> String.concat "\n"
    |> print_endline

Отсутствие библиотек всё чаще заставляет задуматься о переходе на hackerrank, где есть Core. Если писать решения для обычных задач ещё можно, то участвовать в соревнованиях может быть сложно. А с другой стороны так я получаю больше практики и лучше понимаю, как работает OCaml.