Рассмотрим этот код 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
Как я могу проверить, является ли последовательность пустой?