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