let factors n = [for x in 1 .. n do if n % x = 0 then yield x]
Как показал Kvb, вы можете использовать охранника без последовательности.
let posInt n = [if n > 0 then yield n]
На примечании стороны:
Поскольку список не ленив в F #, вы должны использовать последовательность для бесконечного ряда.
let posInfinite = seq {1 .. Int32.MaxValue}
Вы не можете создать бесконечную последовательность увеличивающихся целых чисел только с помощью понимания списка. Вы должны использовать рекурсию или другую встроенную функцию, например, развернуть. .Net имеет целочисленный тип произвольной длины, называемый BigInteger. Вы можете использовать его, просто добавив "I
" в качестве типа к целому числу. Этот пример вернет истинную бесконечную последовательность целых чисел.
let posInfinite = Seq.unfold (fun i -> Some(i, i + 1I)) 1I