У меня неожиданно возникают проблемы с переходом от списка "вариант до списка, содержащего только те элементы, которые являются Some".
Моя первоначальная попытка:
let ga = List.filter (fun xx ->
match xx with
| Some(g) -> true
| None -> false) gao
Но, конечно, этот тип результата по-прежнему является "списком опций". Я не знаю, как использовать 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
Я бы предпочел найти нерекурсивное решение или узнать, что стандартный способ для такого рода вещей.