Digamos que tengo un conjunto ordenado de enteros, xs, y quiero recuperar todos los enteros en xs que son [x, y), es decir. entre x y y.¿Cómo obtengo la secuencia de números en un conjunto ordenado que están entre dos enteros en clojure?
que puedo hacer:
(select #(and (>= % x) (< % y)) xs)
Pero esto es ineficiente - O (n) cuando podría ser O (log n), espero que el número de elementos volvió a ser pequeña. Utilizar take-while y drop-while me permitiría salir una vez que haya llegado a y, pero todavía no puedo saltar a x eficientemente.
Estoy aprendiendo clojure así que aquí es la forma en que lo haría en 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
¿Puedo hacer esto en clojure?