オプションのリストから、Someである要素のみを含むリストに移動する際に、予期せず少し問題が発生しました。
私の最初の試みは:
let ga = List.filter (fun xx ->
match xx with
| Some(g) -> true
| None -> false) gao
しかしもちろん、この結果タイプはまだオプションリストです。すべてのケースをmatchステートメントで処理する必要があるため、List.mapを使用してこれを凝縮する方法がわかりません。私には醜い解決策がありますが、もっと良いものがあるかどうか疑問に思っています。
醜い:
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]