(defn pred-idx [pred [idx hist] cur]
(if (pred cur)
[(inc idx) (conj hist idx)]
[(inc idx) hist]))
(defn idx-filter [pred col]
(second (reduce (partial pred-idx pred) [0 []] col)))
(first (idx-filter pos? [-1 0 99 100 101]))
2
Не уверен, что это лучше, но это работает. Я думаю, что это требует оценки всей последовательности, и если вам нужны все индексы, это было бы лучше. Правильнее всего, наверное, превратить это в ленивую последовательность, но я готов к вечеру.