f# - problema - ricardo arjona como duele
¿Es la mejor forma de condensar una lista de opciones de tipo a solo elementos que no son ninguno? (1)
De forma inesperada, tengo un poco de problema con pasar de una lista de opciones a una lista que contiene solo los elementos que son Algunos
Mi primer intento fue:
let ga = List.filter (fun xx ->
match xx with
| Some(g) -> true
| None -> false) gao
Pero, por supuesto, este tipo de resultado sigue siendo una lista de opciones. No sé cómo usar List.map para condensar esto, porque tiene que manejar todos los casos en una declaración de coincidencia. Tengo una solución fea, pero me pregunto si hay algo mejor.
Feo:
let rec gOptRemove gdec gacc =
match gdec with
| head :: tail ->
match head with
| Some(a) -> gOptRemove tail (a :: gacc)
| None -> gOptRemove tail gacc
| [] -> gacc
Preferiría encontrar una solución no recursiva o averiguar cuál es la forma estándar para este tipo de cosas.
Simplemente
List.choose id
como en
> [Some 4; None; Some 2; None] |> List.choose id;;
val it : int list = [4; 2]