open System [ "Наличие бомбурий", ["Да"; "Да"; "Нет"; "Да"; "Нет"] "Количество клептиконов", ["1"; "1"; "0"; "3"; "5"] "Цвет велория", ["Красный"; "Оранжевый"; "Оранжевый"; "—"; "Синий"] "Наличие пумпеля", ["Нет"; "Да"; "Да"; "—"; "—"] "Величина пумпеля", ["—"; "Большой"; "Маленький"; "—"; "—"] "Возможность крокотания", ["Нет"; "Нет"; "—"; "Да"; "Нет"] "Возможность бульботания", ["Нет"; "Да"; "—"; "Да"; "Нет"] "Наличие дуков и труков", ["—"; "—"; "—"; "—"; "Да"] "Цвет лемпелей", ["Жёлтый"; "Жёлтый"; "Жёлтый"; "Белый"; "Белый"] "Наличие пильских трапков", ["Да"; "Да"; "Да"; "Да"; "Да"]] |> List.fold( fun bugs (question, xs) -> if bugs |> List.filter Option.isSome |> List.length < 2 then bugs else let replies = Set.ofList xs |> Set.fold( fun s x -> sprintf "%s%s%s" s (if String.IsNullOrEmpty s then "" else ", ") x ) "" printfn "Введите %s. Варианты ответа: %s либо тире если Вы не знаете ответ" question replies let answer = System.Console.ReadLine() if answer="-" then bugs else xs |> List.zip bugs |> List.map( function | Some bug, v when v=answer || v="-" -> Some bug | _ -> None) ) ( [ "Аурата сетуньская" "Десятилиньята лепая" "Семипунктата Коха" "Популий грыжомельский" "Гортикола филоперьевая" ] |> List.map Some ) |> List.choose id |> function | [] -> printfn "ответ не найден" | [x] -> printfn "Ответ - %s" x | xs -> printfn "Ответы:" xs |> List.iter (printfn "%s")