Для начала давайте сделаем @ArthurUlfeldt's example в Python.
arr = [1, 2, 38, 2, 3, 9, 4, 2]
и, скажем
sum = [None, None, None, None, None, None, None, None]
Выполнение (исправленное/обновляется?) Python
for i in range(1, len(arr)):
sum[i] = arr[i-1] + i
... дает нам
sum
;[None, 2, 4, 41, 6, 8, 15, 11]
Чтобы преобразовать это в Clojure , вытесните индекс Python на 1, давая
for i in range(len(arr) - 1):
sum[i+1] = arr[i] + (i+1)
Теперь мы можем построить правую как
(map + (butlast arr) (iterate inc 1))
;(2 4 41 6 8 15 11)
... который мы преобразовать в вектор, начиная с индекса 1:
(vec (cons nil (map + (butlast arr) (iterate inc 1))))
;[nil 2 4 41 6 8 15 11]
Вероятно, мы хотим свяжите это значение в a let
:
(let [sum (vec (cons nil (map + (butlast arr) (iterate inc 1))))]
#_(... use `sum` here))
Clojure имеет специализированные функции для работы с родными массивами Java, о которых я сомневаюсь, о чем вы спрашиваете здесь. Пожалуйста, подумайте о том, чтобы перефразировать этот вопрос, если вы действительно говорите о более общем списке или операции последовательности. – Alex
Попробуйте взглянуть на https://blog.safaribooksonline.com/2013/07/24/sequence-abstractions-in-clojure/ или одну из многих отличных книг Clojure. – Alex
Оператор Python 'for' недействителен (устаревший?): Try' for i in range (1, len (arr)): ... ' – Thumbnail