В clojure вы можете применить функцию ко всем элементам в коллекции и иметь возвращаемое значение для ввода следующего? - PullRequest
0 голосов
/ 19 ноября 2018

Скажем, у вас есть подобная коллекция ({A: 1 B: 2} {A: 2 B: 5} {A: 4 B: 7}) с неопределенным количеством {A: B:} частей и функцией (func arg1 arg2).

Если мы предположим, что существует некоторое начальное состояние state ичто каждый вызов func генерирует new-state.Можно ли сконструировать что-то, что действует следующим образом?

(->(func state {A: 1 B: 2})
(func {A: 2 B: 5}) 
(func {A: 4 B: 7}))

По сути, первый аргумент - это новое состояние, а второй - следующий {A: B:} из коллекции.

Любая помощь будетцениться!

1 Ответ

0 голосов
/ 19 ноября 2018

Да, эта функция называется reduce:

(reduce
  func
  initial-state
  input-sequence)

или версия, в которой первый элемент входной последовательности используется в качестве исходного состояния (проверьте функцию doc, чтобы узнать подробности ее поведения):

(reduce 
  func
  input-sequence)

Например:

(reduce
  +
  100
  [1 2 3 4 5])
;; => 115

(reduce
  +
  [1 2 3 4 5])
;; => 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...