考虑这个计算数字因子的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
如何测试序列是否为空?
答案 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>
的对象以获得参考相等性。