all I want to do is increment 'i' as list elements go, but it seems that sequence starts from '1' as incrementing go first (?)
(fn [lst]
(doseq [i (for [i (range (count lst))] (inc i))]
(println i)
))
All I want to get is '0' for 1-range list, but it returns '1'. I tried to 'for [i 0 (range (count lst))', but it errors. Ty.
Use doseq
if you want to perform side effects only - without collecting the result.
Use for
loop if you want to collect the result.
Somehow you weirdly use both, doseq
an for
.
I think, what you want is this:
(defn count-list [lst]
(doseq [i (range (count lst))]
(println i)))
In Python, there is enumerate()
to loop over lists
and at the same time to have an index (position of the element in the list).
l = ['a', 'b', 'c']
for i, el in enumerate(l):
print(f"index: {i} value: {el}")
In Clojure you could do this with map-indexed:
(def l ["a" "b" "c"])
(map-indexed (fn [i el] [i el]) l)
;; => ([0 "a"] [1 "b"] [2 "c"])
Just I want to say is: In Python, looping over a list using its index is quite C-ish - and not Pythonic. Also in Clojure, you rarely need the index. Because you could do:
(def l ["a" "b" "c"])
(for [el l]
; do something with `el` here
; and return the value which should be collected!
el)
similar to Python's list-comprehensions:
[el for el in l]