Кажется, вы хотите использовать функцию nth.
Из документов для этой функции:
clojure.core/nth
([coll index] [coll index not-found])
Returns the value at the index. get returns nil if index out of
bounds, nth throws an exception unless not-found is supplied. nth
also works for strings, Java arrays, regex Matchers and Lists, and,
in O(n) time, for sequences.
Это последнее предложение означает, что на практике nth медленнее для элементов, находящихся "дальше" в последовательностях, без гарантии более быстрой работы для коллекций, которые в принципе поддерживают более быстрый доступ (~ O (n)) к индексированным элементам. Для (замыкающих) последовательностей это имеет смысл; API clojure seq основан на API связанного списка, и в связанном списке вы можете получить доступ к n-му элементу, пройдя каждый элемент перед ним. Именно это ограничение делает конкретные реализации списков взаимозаменяемыми с ленивыми последовательностями.
Функции доступа к коллекции Clojure обычно создаются таким образом; функции, которые имеют значительно лучшее время доступа к определенным коллекциям, имеют отдельные имена и не могут использоваться «случайно» в медленных коллекциях.
В качестве примера типа коллекции, который поддерживает быстрый «произвольный» доступ к элементам, векторы замыкания могут вызываться; (индекс-номер коллекции векторов) возвращает элемент с индексом-индексом - и обратите внимание, что последующие последовательности не могут быть вызваны.