все, что я хочу сделать, это увеличить «i» по мере продвижения элементов списка, но кажется, что последовательность начинается с «1», поскольку сначала увеличивается (?)
(fn [lst]
(doseq [i (for [i (range (count lst))] (inc i))]
(println i)
))
Все, что я хочу получить, это «0» для списка с 1 диапазоном, но он возвращает «1». Я попытался «для [i 0 (диапазон (счетчик))», но это ошибки. Тай.


Используйте doseq, если вы хотите выполнять только побочные эффекты — без сбора результата.
Используйте цикл for, если хотите собрать результат.
Как-то странно вы используете оба, doseq и for.
Я думаю, что вы хотите это:
(defn count-list [lst]
(doseq [i (range (count lst))]
(println i)))
В Python есть enumerate() для циклического перебора списков
и при этом иметь индекс (позиция элемента в списке).
l = ['a', 'b', 'c']
for i, el in enumerate(l):
print(f"index: {i} value: {el}")
В Clojure вы можете сделать это с индексацией карты:
(def l ["a" "b" "c"])
(map-indexed (fn [i el] [i el]) l)
;; => ([0 "a"] [1 "b"] [2 "c"])
Просто я хочу сказать: в Python цикл по списку использование его индекса довольно C-ish, а не Pythonic. Также в Clojure вам редко нужен файл index. Потому что вы могли бы сделать:
(def l ["a" "b" "c"])
(for [el l]
; do something with `el` here
; and return the value which should be collected!
el)
похоже на понимание списка Python:
[el for el in l]