我在下面有一个函数来返回元音。但是我想只返回真值,我该怎么做?
(map #{\a \e \i \o \u} (seq (char-array "Hello"))) => (nil \e nil nil \o)
答案 0 :(得分:7)
filter identity (map f ...
= (keep f ...
。
> (keep #{\a \e \i \o \u} (seq (char-array "Hello")))
(\e \o)
答案 1 :(得分:4)
过滤非零的
(filter (comp not nil?)
(map #{\a \e \i \o \u} (seq (char-array "Hello")))
(\e \o)
你可以通过gneral过滤这样的真实性:
(filter #(if % true false) (map #{\a \e \i \o \u} "Hello"))
(\e \o)
值得注意的是,如果项目在集合中,集合实现了一个可调用的接口,返回true,因此您可以直接使用集合作为谓词进行过滤,因此对于您的初始示例,答案可以直接用过滤器表示(尽管这是一个不同的问题)
(filter #{\a \e \i \o \u} "Hello")
(\e \o)
ps:字符串已经是序列,因此你并不需要(seq (char-array "Hello"))
位,尽管它并没有真正受到伤害。
答案 2 :(得分:4)
我想这与counting only truthy values in a collection相同,因此请使用带有过滤器的identity
函数:
(filter identity (map #{\a \e \i \o \u} (seq (char-array "Hello")))