根据 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
时使用了固定参数 x
。 fn
语法还为您提供了为每个参数提供描述性名称的选项,这通常是 reader.
非常有用的文档
当然,如果您在固定参数之前有任何空闲参数,则无法使用 partial
。
假设您有以下代码来获取所有素数直到一个参数:
(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
时使用了固定参数 x
。 fn
语法还为您提供了为每个参数提供描述性名称的选项,这通常是 reader.
当然,如果您在固定参数之前有任何空闲参数,则无法使用 partial
。