根据 clojure 中的列表过滤列表

Filtering a list in dependence of that list in clojure

假设您有以下代码来获取所有素数直到一个参数:

(defn my-filt [x z]
   (or (not= 0 (mod z x))
       (= z x)))

(defn my-filter [y x]
  (filter (partial my-filt x) y))


(defn primes [end_prime]
  (reduce my-filter
    (cons (range 2 end_prime) (range 2 end_prime))))

(primes 19)

如您所见,我使用 partial my-filt x,因为我需要 my-filt 函数中的列表 x,因为过滤器仅取决于一个参数。我的问题如下:是否有更好的方法来使用惯用的 clojure 而不是在过滤器中使用 partial?

我总是更喜欢明确说明你在做什么,而不是使用 partial。例如,我会写:

(filter  #(my-filt x %)  y)

或者有时完整的功能说明:

(fn [z] (my-filt x z))

所以很明显我们调用 my-filt 时使用了固定参数 xfn 语法还为您提供了为每个参数提供描述性名称的选项,这通常是 reader.

非常有用的文档

当然,如果您在固定参数之前有任何空闲参数,则无法使用 partial