Beste Möglichkeit, eine Liste mit Optionstypen auf Elemente zu beschränken, die keine sind?

Ich habe unerwarteterweise ein bisschen Probleme, von einer Liste mit Optionen zu einer Liste mit nur einigen Elementen zu wechseln.

ein erster Versuch war:

    let ga = List.filter (fun xx ->
        match xx with
        | Some(g) -> true
        | None -> false) gao 

Aber natürlich ist dieser Ergebnistyp immer noch eine Optionsliste. Ich kann List.map nicht verwenden, um dies zu verdichten, da Sie alle Fälle in einer match-Anweisung behandeln müssen. Ich habe eine hässliche Lösung, aber ich frage mich, ob es etwas Besseres gibt.

Hässlich

    let rec gOptRemove gdec gacc = 
        match gdec with 
        | head :: tail -> 
            match head with 
            | Some(a) -> gOptRemove tail (a :: gacc)
            | None -> gOptRemove tail gacc
        | [] -> gacc

Ich würde es vorziehen, eine nicht-rekursive Lösung zu finden oder herauszufinden, wie dies standardmäßig funktioniert.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage