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.