Первый аргумент (%1
в анонимной функции) функции, переданной в reduce
, является аккумулятором, который изначально является пустой картой {}
, передаваемой в качестве второго аргумента reduce
.Карты - это функции, которые ищут значение для данной клавиши, возвращая необязательное значение по умолчанию, если ключ не найден, например,
({"word" 1} "word") = 1
и
({"word" 1} "other" 0) = 0
, поэтому
(%1 %2 0)
ищет счетчик текущего слова (второй аргумент функции сокращения) в карте аккумулятора, возвращая 0, если слово еще не было добавлено.inc
увеличивает текущий счетчик, поэтому
#(assoc %1 %2 (inc (%1 %2 0))
увеличивает счетчик текущего слова в промежуточной карте или устанавливает его в 1, если это слово встречается впервые.