У меня неожиданно возникли проблемы с переходом от списка опций к списку, содержащему только элементы, являющиеся элементами Some.
Моя первоначальная попытка была:
let ga = List.filter (fun xx ->
match xx with
| Some(g) -> true
| None -> false) gao
Но, конечно, этот тип результата по-прежнему 'список параметров. Я не знаю, как использовать List.map, чтобы сжать это, потому что вы должны обрабатывать все случаи в выражении match. У меня есть уродливое решение, но мне интересно, есть ли что-нибудь лучше.
Гадкий:
let rec gOptRemove gdec gacc =
match gdec with
| head :: tail ->
match head with
| Some(a) -> gOptRemove tail (a :: gacc)
| None -> gOptRemove tail gacc
| [] -> gacc
Я бы предпочел найти нерекурсивное решение или выяснить, каков стандартный способ для такого рода вещей.
Просто
List.choose id
как в
> [Some 4; None; Some 2; None] |> List.choose id;;
val it : int list = [4; 2]