3

我在下面有一个函数来返回元音。但是我只想返回真实值,我该怎么做?

(map #{\a \e \i \o \u} (seq (char-array "Hello"))) => (nil \e nil nil \o)
4

3 回答 3

7

filter identity (map f ...= (keep f ...

> (keep #{\a \e \i \o \u} (seq (char-array "Hello")))
(\e \o)
于 2012-09-20T21:39:04.297 回答
4

过滤非零的

(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"))位,尽管它并没有真正的伤害。

于 2012-09-20T18:07:05.463 回答
4

我想这与只计算集合中的真值相同,因此请使用identity带有过滤器的函数:

(filter identity (map #{\a \e \i \o \u} (seq (char-array "Hello")))
于 2012-09-20T19:13:18.630 回答