2010-11-05 4 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 и (п/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 создает пустой Seq. Это не проверяет.

+0

Спасибо. Это был первый ответ на долю секунды! – user392226

2

Seq.isEmpty

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

Проблема с = тестом, я полагаю, что он сравнивает два объекта типа IEnumerable<int> для референтного равенства.

+0

Спасибо. Я просмотрел все функции модуля для 'Seq', но не был достаточно осторожен. Я забыл «Seq.isEmpty». – user392226

Смежные вопросы