Да, это так, но вы не можете вкладывать формы #()
читатель-макрос, вам нужно использовать форму (fn)
.
Например:
(#(#(+ %1 %2) 1) 2)
неработать, потому что нет способа ссылаться на аргументы внешних анонимных функций.Это читается как внешняя функция, принимающая два аргумента, и внутренняя функция, принимающая нулевые аргументы.
Но вы можете написать то же самое с помощью (fn...)
s:
user=> (((fn [x] (fn [y] (+ x y))) 1) 2)
3
Вы также можете использовать форму #()
для одной из двух анонимных функций, например:
user=> (#((fn [x] (+ x %)) 1) 2)
3
Таким образом, вы можете встроить свою функцию div
следующим образом (обратите внимание, что нам пришлось изменить форму #()
, переданную в map
, на форму (fn)
):
#(= true (= 0 (reduce + (map (fn [x] (mod % x)) (range 1 21)))))