是否可以对带有多个参数的谓词使用过滤器?如果是这样,我将如何在此代码的上下文中做到这一点:
;predicate
(defn classInstructor [instructor class]
(str/includes? class instructor))
(defn instructorClasses [instructor classList]
(filter classInstructor classList))
答案 0 :(得分:0)
map
函数可以采用适用于多个参数的函数。例如,
=> (map + [1 2 3] [4 5 6])
(5 7 9)
+
得到两个参数,每个序列一个。没有filter
的相应版本。您可以如下扩展标准filter
:
(defn filter
([f coll]
(clojure.core/filter f coll))
([f coll & colls]
(filter #(apply f %) (apply map vector (cons coll colls)))))
例如
=> (filter (comp odd? +) [1 2 3] [4 6 8])
([1 4] [3 8])
如您所见,我们必须以某种方式呈现尚存的序列。我认为这样做并不是有说服力的或自然的。我认为这不值得做。
答案 1 :(得分:0)
我将使用匿名函数这样做:
(defn classInstructor [instructor class]
(str/includes? class instructor))
(defn instructorClasses [instructor classList]
(filter #(classInstructor instructor %) classList))
这样,当一个人呼叫instructorClasses
时,instructor
的值将传递到classInstructor
。