Clojure — запуск «для i в диапазоне (0, x)» (начало запроса)

все, что я хочу сделать, это увеличить «i» по мере продвижения элементов списка, но кажется, что последовательность начинается с «1», поскольку сначала увеличивается (?)

(fn [lst]
(doseq [i (for [i (range (count lst))] (inc i))]
        (println i)

))

Все, что я хочу получить, это «0» для списка с 1 диапазоном, но он возвращает «1». Я попытался «для [i 0 (диапазон (счетчик))», но это ошибки. Тай.

Введение в одну из самых важных концепций в React - функциональное программирование
Введение в одну из самых важных концепций в React - функциональное программирование
React разработан с использованием концепции функционального программирования, поэтому понимание функционального программирования важно для изучения...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
0
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте 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]

Другие вопросы по теме