Я хочу написать функцию, которая реализует основное использование grep: сопоставление шаблона в файле. И я хочу, чтобы match_file_pattern возвращал список совпадающих строк. Но код здесь не может скомпилировать, ошибка:как заставить начать следующее выражение в ocaml
Error: This expression has type string list but an expression was expected of type unit
И код:
let match_file pattern file_name =
let matched_lines = ref [] in
let ic = open_in file_name in
try
while true
do
let line = input_line ic in
if (Str.string_match (Str.regexp pattern) line 0)
then
matched_lines := line::!matched_lines
done;**(*!matched_lines*)**(*I need add this to compile successfully*)
with End_of_file ->
close_in ic;
List.rev !matched_lines;;
Я думаю, что ошибка вызвана в ocaml
, close_in ic; List.rev !matched_lines
группируется в подвыражением «с» ключевое слово, поэтому его тип должен совпадать с выражением «try». Я пытаюсь найти способы разбить связь между close_in ic;
и List.rev !matched_lines
, но не удалось.