Скажем, у меня есть отсортированный набор целых чисел, xs, и я хочу получить все целые числа в xs, которые являются [x, y), т.е. между х и у.
Я могу сделать:
(select #(and (>= % x) (< % y)) xs)
Но это неэффективно - O (n), когда это может быть O (log n), я ожидаю, что количество возвращаемых элементов будет небольшим. Использование take-while и drop-while позволило бы мне выйти, как только я достиг y, но я все еще не могу эффективно перейти к x.
Я только изучаю clojure, вот как я это делаю в 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
Могу ли я сделать это в ближайшем будущем?