Написание функции аккумулятора в Clojure - PullRequest
7 голосов
/ 09 декабря 2011

Я хотел бы знать, как написать пример аккумулятора, включенного в эссе Месть ботаников . Легко понять, как это работает, однако я не могу воссоздать его в Clojure - он не накапливает , а просто возвращает сумму i и начальное значение n.

Ключ находится в incf (в версии Common Lisp) или + = (в JavaScript).

Другими словами: как изменить состояние ссылочной функции? Я видел несколько примеров мутирующих переменных, но они не выглядят точно симпатичными не так ли?

1 Ответ

22 голосов
/ 09 декабря 2011

Не надо, иттттт!Спаси себя, пока не стало слишком поздно!Закрытие состояния без всякой причины - это не то, что Clojure поощряет, поэтому, конечно, это не так удобно, как это было бы при обычном шумихе.

А если серьезно, это классический пример объяснения замыканий, и хотя он не очень полезен в Clojure, приятно знать перевод.Вы должны написать что-то вроде:

(defn foo [n]
  (let [acc (atom n)]
    (fn [i] (swap! acc + i))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...