Подтвердить что ты не робот

Лучший способ сконфигурировать список типов параметров только для тех элементов, которые не являются ничем?

У меня неожиданно возникают проблемы с переходом от списка "вариант до списка, содержащего только те элементы, которые являются 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

Я бы предпочел найти нерекурсивное решение или узнать, что стандартный способ для такого рода вещей.

4b9b3361

Ответ 1

Просто

List.choose id

как в

> [Some 4; None; Some 2; None] |> List.choose id;;
val it : int list = [4; 2]

List.choose

id