我是 Clojure 的初学者,我遇到了一个问题,我什至不确定是否可以在 Closure 中完成。
所以问题如下。我已经实现了一个函数,它从一个区间(直到一个限制)计算素数。
(defn gather_primes_in_range [range_start range_end target_number prime_list]
(if (or (= 0 target_number) (> range_start range_end) (= FIND_MORE_PRIMES false))
prime_list
(do
(if (is_prime? range_start)
(gather_primes_in_range (+ range_start 1) range_end (- target_number 1) (conj, prime_list, range_start))
(gather_primes_in_range (+ range_start 1) range_end target_number prime_list)
)
)
)
)
(defn find_nr_of_primes_in_range [range_start range_end target_number]
(if (< range_start 2)
(gather_primes_in_range 2 range_end target_number [])
(gather_primes_in_range range_start range_end target_number [])
)
)
这工作得很好。但我现在想要的是有一个全局变量,它应该存储在每个方法上,调用在变量中找到的素数,以便稍后查找。在 Python、Ruby 或 Scala 等其他语言中,我只需使用一个 Set 来完成此操作,然后在从函数返回之前向其中添加条目。但是在 Clojure 中,我不知道如何解决这个问题。
基本上我尝试的是,在某个地方声明了全局:
(def PRIMES_FOUND_SO_FAR #{})
然后以某种方式在返回时将条目添加到该变量中。这在 Clojure 中是否可行,如果可以,怎么办?我已经尝试使用swap!
andatom
或 set 来更改其他变量的值!但在任何情况下都无法在这里工作。