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