У меня есть следующая функция для сбора данных c отчетов о транзакциях, вывод этого предыдущего вопроса .
(def recreate-database
"Defines a function which when called will call each of the four given
functions and return a collection containing the output of each."
(juxt pt1-transact-schema
pt1-transact-data
pt2-transact-schema
pt2-transact-data))
Следующим шагом является то, что каждая из этих функций может сама вызывать не одну, а серию транзакций, поэтому желаемый полный результат будет представлять собой вложенную коллекцию отчетов о транзакциях для начальной сборки базы данных.
У меня было следующее, что было неподходящим, потому что при вызове из recreate-database
выше , приходит только отчет о последней транзакции, функция, конечно, возвращает только его окончательную форму.
(defn pt1-transact-data []
(d/transact conn {:tx-data pt1-user-data})
(d/transact conn {:tx-data pt1-path-data})
(d/transact conn {:tx-data pt1-series-data}))
Итак, я пришел к следующему
(defn pt1-transact-data []
(map identity
[(d/transact conn {:tx-data pt1-user-data})
(d/transact conn {:tx-data pt1-path-data})
(d/transact conn {:tx-data pt1-series-data})
(d/transact conn {:tx-data pt1-path-series-data})]))
Это работает нормально, но все еще случайная сложность. map identity
является лингвистически низким уровнем по отношению к предполагаемому здесь значению.
Следовательно, мышление было, нам просто нужно « реализовать последовательность », поэтому я извлек:
(defn realize-all [coll] (map identity coll))
Потом я вспомнил doall
. Просто использование этого работает и здесь.
Итак, это то же самое, что делает doall
?
Я заметил из (source doall)
, это не похоже на то, что приводит к dorun
, что приводит к ... recur
.
Итак, map identity
или doall
или dorun
, похоже, служат аналогичной цели здесь.
Эти эквиваленты? Есть еще что сказать?