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

时间:2010-11-05 06:51:55

标签: 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

换句话说,如果factors为空,则返回n。否则,从factors拉出第一个元素。目标是考虑1和(n / 2)之间的所有因素,以及 n 本身,因为1和 n 始终是<的因素EM>名词的

factors = seq []测试不起作用。我通过看这个来达到这个语法:

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

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

> Seq.empty = seq [] ;;
val it : bool = false

如何测试序列是否为空?

2 个答案:

答案 0 :(得分:16)

试试Seq.isEmpty

if Seq.isEmpty yourSeqName then doSomething else doSomethingElse

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

答案 1 :(得分:2)

Seq.isEmpty

http://msdn.microsoft.com/en-us/library/ee353547.aspx

我认为,=测试存在的问题是它正在比较两个不同类型IEnumerable<int>的对象以获得参考相等性。