Чтобы использовать модуль Str
, необходимо установить связь с библиотекой str
. Например, с ocamlc
вам нужно передать str.cma
, а с ocamlopt
вам нужно пройти str.cmxa
. Я не знаю, как это сделать с OcamlPro.
В любом случае Str.last_chars
здесь не особенно полезен. Не работает, если имя файла короче суффикса. Кстати, ваш код никогда не будет совпадать, потому что ".osc2"
это 5 символов, что никогда не равно last_chars x 4
.
Модуль Filename
из стандартной библиотеки имеет функции для извлечь и проверить расширение файла. Вам не нужно выполнять какие-либо манипуляции со строками.
Я не знаю, что вы считаете «безобразным адом», но, кроме ошибки с манипуляциями со строками, я не вижу никаких проблем с вашим кодом , Перечислять совпадения и фильтровать их совершенно идиоматично c.
let list_osc2 =
let list_files = Sys.readdir "tests/osc2/expected/pp" in
List.filter (fun name -> check_suffix name ".osc2") (Array.to_list list_files)