Clojure 中的序列处理:map、filter 及相关函数的使用
1. filter 函数
filter 函数与 map 函数有所不同,它常常产生比输入序列元素更少的结果序列。调用 filter 的方式与 map 类似:
user> (filter keyword? ["a" :b "c" :d "e" :f "g"])
(:b :d :f)
和 map 一样,filter 的第一个参数是一个函数,该函数会作用于序列中的每个元素。不同的是,这里的函数作为一个谓词使用,我们只关心其返回值在逻辑上是真还是假。当返回真值时,该元素会被包含在结果序列中。
与 map 的一个关键区别是,filter 的谓词仅用于决定某个元素是否应被包含,而不会以任何方式改变元素。filter 的结果集始终是输入集的子集。
练习 4.02:开始使用 filter
以下是使用 filter 处理整数列表以获得不同结果的步骤:
1. odd?
函数是一个谓词,如果数字为奇数则返回 true。在 REPL 中单独测试它:
user> (odd? 5)
true
- 传入一个偶数作为输入:
user> (odd? 6)
false