ricardo problema letras letra ingrato duele descargar como canciones arjona amor acordes f# functional-programming

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]

List.choose

id