Ocaml - применить функцию к каждой строке в списке строк и вернуть новый список строк - PullRequest
0 голосов
/ 27 сентября 2019

Я новичок в OCaml, и я немного запутался в использовании match.Для этой проблемы я учусь работать с функциями в списках строк, которые возвращают списки строк.Я пытаюсь запустить функцию, которая возвращает bool для каждого элемента в списке строк и получить в качестве вывода список строк этих bools.Например, скажем, у вас есть следующее:

let foo str =
  (String.length str) > 3;;

let list1 = ["please";"help";"me"]

, и вы хотите применить foo к каждому элементу в списке list со следующим желаемым выводом:

output = [ "true";"true";"false"]

то, что я сделал, явно не работает, так как я не возвращаю список строк:

let rec bar (ls : string list) : string list=
    match foo ls with
    | [] -> ()
    | x :: xs -> x :: bar xs
;;

У кого-нибудь есть идеи, как мне это сделать?Спасибо!

1 Ответ

0 голосов
/ 27 сентября 2019

В вашем выражении соответствия оба случая должны возвращать список, так как это тип, который вы хотите использовать в качестве результата (не ()), и вы хотите деструктурировать список (а не результат применения foo ксписок) например.

let rec bar (ls : string list) : string list=
    match ls with
    | [] -> []
    | x :: xs -> (if (foo x) then "true" else "false") :: bar xs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...