2012-09-20 57 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

哈哈對,這很有道理,我猜應該更仔細地閱讀這個問題。 –

相關問題