функция apply
создает вызов функции из функции и последовательности, содержащей аргументы функции.
(apply cartesian-product '(["a" "b" "c"] [1 2 3]))
(("a" 1) ("a" 2) ("a" 3) ("b" 1) ("b" 2) ("b" 3) ("c" 1) ("c" 2) ("c" 3))
в качестве другого примера:
(apply + (range 10))
оценивает (range 10)
в последовательность (0 1 2 3 4 5 6 7 8 9)
и затем создает этот вызов функции
(+ 0 1 2 3 4 5 6 7 8 9)
и обратно по многочисленным просьбам:
для в порядке, функция for делает это хорошо.
(for [x ["a" "b"] y [1 2]] [x y])
(["a" 1] ["a" 2] ["b" 1] ["b" 2])