Вызов Clojure функций высшего порядка - PullRequest
7 голосов
/ 15 мая 2011

Если я определю функцию, которая возвращает функцию, подобную этой:

(defn add-n
  [n]
  (fn [x] (+ x n)))

Затем я могу присвоить результат символу:

(def add-1 (add-n 1))

и назовите его:

(add-1 41)
;=> 42

Как мне вызвать результат (add-n 1) без присвоения его новому символу? Следующее производит этот вывод:

(println (add-n 1))
#<user$add_n$fn__33 user$add_n$fn__33@e9ac0f5>
nil

#<user$add_n$fn__33 user$add_n$fn__33@e9ac0f5> является внутренней ссылкой на сгенерированную функцию.

1 Ответ

16 голосов
/ 15 мая 2011

Легко:

(println ((add-n 1) 41))

Вывод, который вы видели, является определением функции. Для его вызова достаточно поместить его в круглые скобки и добавить параметр.

...