2010-06-03 10 views
6

Powiedzmy, że mam posortowany zbiór liczb całkowitych, xs, i chcę pobrać wszystkie liczby całkowite w xs, które są [x, y), tj. między X i Y.Jak uzyskać ciąg liczb w sortowanym zestawie, które znajdują się między dwiema liczbami całkowitymi w clojure?

mogę zrobić:

(select #(and (>= % x) (< % y)) xs) 

Ale to jest nieefektywne - O (n), gdy to może być O (log n), I oczekiwać, że liczba elementów powrócił być małe. Korzystanie z opcji "wpadnij na chwilę" i "drop-while" pozwoliłoby mi wyjść, gdybym już osiągnął y, ale nadal nie mogę wydajnie przeskoczyć do x.

Ja tylko nauka Clojure więc o to w jaki sposób mogę to zrobić w C++:

set<int>::iterator first = xs.lower_bound(x); 
set<int>::iterator last = xs.lower_bound(y); 
for (; first != last; ++first) 
    // do something with *first 

Mogę to zrobić w Clojure?

Odpowiedz

8

Ups! Brakowało mi funkcji subseq, nie ma linku do niej ze strony struktury danych dokumentacji.

(subseq xs >= x < y) 
Powiązane problemy