我出乎意料地遇到麻烦,从“选项”列表转到仅包含“某些”元素的列表。
我最初的尝试是:
let ga = List.filter (fun xx ->
match xx with
| Some(g) -> true
| None -> false) gao
但是,当然,此结果类型仍然是“选项列表”。我不知道如何使用List.map来压缩它,因为您必须在match语句中处理所有情况。我有一个丑陋的解决方案,但我想知道是否还有更好的方法。
丑陋:
let rec gOptRemove gdec gacc =
match gdec with
| head :: tail ->
match head with
| Some(a) -> gOptRemove tail (a :: gacc)
| None -> gOptRemove tail gacc
| [] -> gacc
我宁愿找到一种非递归解决方案,或者找出这种事情的标准方法。