2010-11-05 74 views
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 

換句話說,如果factors是空的,則返回n。否則,從factors中取出第一個元素。我們的目標是1和(N/2)之間考慮到所有的因素,和Ñ本身自1和Ñ總是的Ñ因素。

factors = seq []測試不起作用。我來到這個語法通過看這個:

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

不過,我不認爲seq []實際上是一個空序列:

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

如何測試,如果序列是空的?

回答

16

嘗試Seq.isEmpty

if Seq.isEmpty yourSeqName then doSomething else doSomethingElse 

順便說一句,Seq.empty創建一個空的序列。它不測試一個。

+0

謝謝。這是一瞬間的第一個答案! – user392226 2010-11-05 07:04:15