是否可以将filter与具有多个参数的谓词一起使用?如果是这样的话,我将如何在这个代码的上下文中做到这一点:
;predicate
(defn classInstructor [instructor class]
(str/includes? class instructor))
(defn instructorClasses [instructor classList]
(filter classInstructor classList))
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])
正如你所看到的,我们必须以某种方式呈现幸存的序列。我觉得这样做没有说服力,也不自然。我认为不值得这样做。
我会这样做,使用一个匿名函数:
(defn classInstructor [instructor class]
(str/includes? class instructor))
(defn instructorClasses [instructor classList]
(filter #(classInstructor instructor %) classList))
这样,当调用instructorClasses
时,instructor
的值被传递给classInstructor
。