如何在F#中测试序列是否为空?

use*_*226 10 f#

考虑这个计算数字因子的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
Run Code Online (Sandbox Code Playgroud)

换句话说,如果factors是空的,那么返回n.否则,从中拉出第一个元素factors.我们的目标是占1和之间的所有因素(N/2) ,和Ñ本身自1和Ñ总是因素Ñ.

factors = seq []测试是行不通的.我通过看这个来达到这个语法:

> seq {1 .. 100} |> Seq.filter (fun x -> false) ;;
val it : seq<int> = seq []
Run Code Online (Sandbox Code Playgroud)

但是,我认为seq []实际上并不是一个空序列:

> Seq.empty = seq [] ;;
val it : bool = false
Run Code Online (Sandbox Code Playgroud)

如何测试序列是否为空?

Ste*_*owe 16

试试Seq.isEmpty.

if Seq.isEmpty yourSeqName then doSomething else doSomethingElse
Run Code Online (Sandbox Code Playgroud)

顺便说一句,Seq.empty创建一个空的Seq.它没有测试一个.