2010-11-05 34 views
10

xem xét F # mã này mà tính một yếu tố của một số:Làm cách nào để kiểm tra xem một chuỗi có trống trong F # không?

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 

Nói cách khác, nếu factors là trống rỗng, sau đó trở về n. Nếu không, hãy kéo phần tử đầu tiên ra khỏi factors. Mục tiêu là tính đến tất cả các yếu tố giữa 1 và (n/2)n chính nó kể từ 1 và n luôn là các yếu tố của n.

Bài kiểm tra factors = seq [] không hoạt động. Tôi đến cú pháp này bằng cách nhìn vào này:

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

Tuy nhiên, tôi không nghĩ rằng seq [] thực sự là một chuỗi rỗng:

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

Làm thế nào tôi có thể kiểm tra nếu một chuỗi rỗng?

Trả lời

16

Hãy thử Seq.isEmpty.

if Seq.isEmpty yourSeqName then doSomething else doSomethingElse 

Bằng cách này, Seq.empty tạo một Seq trống. Nó không kiểm tra cho một.

+0

Cảm ơn. Đây là câu trả lời đầu tiên trong một giây! – user392226

2

Seq.isEmpty

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

Vấn đề với kiểm tra = của bạn, tôi đoán, là nó được so sánh hai đối tượng khác nhau của loại IEnumerable<int> để tham khảo-bình đẳng.

+0

Cảm ơn. Tôi đã xem xét tất cả các chức năng của mô-đun cho 'Seq', nhưng không đủ cẩn thận. Tôi bỏ qua 'Seq.isEmpty'. – user392226

Các vấn đề liên quan