如何使用Clojure实现与以下代码相同的功能?

时间:2015-07-28 13:49:49

标签: python clojure common-lisp

实际上这是http://www.paulgraham.com/icad.html中的一个问题 Common Lisp代码:

(defun foo (n)
  (lambda (i) (incf n i)))

Python代码:

def foo (n):
    s = [n]
    def bar (i):
        s[0] += i
        return s[0]
    return bar

我想知道如何使用Clojure在函数中保存值。

请注意,这是一个累加器,意味着

(def foo-2 (foo 2))
(foo 2) => 4
(foo 3) => 7

1 个答案:

答案 0 :(得分:1)

 (defn foo [n]
   (let [accumulate (atom n)]
     (fn [i] (swap! accumulate + i))))

 (def foo-2 (foo 2))

 (foo-2 2)
 => 4
 (foo-2 3)
 => 7