2012-09-20 30 views

回答

4

过滤器用于非零那些

(filter (comp not nil?) 
    (map #{\a \e \i \o \u} (seq (char-array "Hello"))) 
(\e \o) 

你可以在gneral过滤器上truthyness像这样:

(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"))位,虽然它并没有真正受到伤害。

+0

感谢您的回答。我尝试过,但似乎chars是麻烦的!但后来试图通过取代真正的?通过char?它的工作! – murtaza52

+1

字符不是伪造的:'(if \ o true false); => true'。谓词“真?”不测试真实性,它测试值*是否为“真”*值。在clojure中只有两个不真实的值是'nil'和'false'。 – mtyaka

+0

我滥用术语真理,对不起。我会修复 –

7

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

> (keep #{\a \e \i \o \u} (seq (char-array "Hello"))) 
(\e \o) 
+0

+1,但为什么'(seq(char-array“Hello”))'?为了简洁起见,为什么不只是“你好”? –

+0

因为'(seq(char-array“Hello”))'是提问者作为参数的问题,而且问题不在于此,所以为什么要改变它呢? –

+0

哈哈对,这很有道理,我猜应该更仔细地阅读这个问题。 –

相关问题