Рассмотрим этот код F #, который вычисляет множитель числа:
let n = 340339004337I
// A sequence of all factors:
let factors = seq { 1I .. n / 2I} |> Seq.filter (fun x -> n % x = 0I)
// Pull off the first factor from the sequence:
let factor =
if factors = seq [] then
n
else
factors |> Seq.nth 0
Другими словами, если factors
пусто, вернуть n
.В противном случае снимите первый элемент с factors
.Цель состоит в том, чтобы учесть все факторы от 1 до (n / 2) и n , поскольку 1 и n всегда являются коэффициентами n.
Тест factors = seq []
не работает.Я пришел к этому синтаксису, взглянув на следующее:
> seq {1 .. 100} |> Seq.filter (fun x -> false) ;;
val it : seq<int> = seq []
Однако я не думаю, что seq []
на самом деле пустая последовательность:
> Seq.empty = seq [] ;;
val it : bool = false
Как проверить, еслипоследовательность пуста?