我有一個函數返回元音。不過,我只想返回truthy值,我該怎麼做?如何僅返回truthy值作爲地圖操作的結果
(map #{\a \e \i \o \u} (seq (char-array "Hello"))) => (nil \e nil nil \o)
我有一個函數返回元音。不過,我只想返回truthy值,我該怎麼做?如何僅返回truthy值作爲地圖操作的結果
(map #{\a \e \i \o \u} (seq (char-array "Hello"))) => (nil \e nil nil \o)
過濾器用於非零那些
(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"))
位,雖然它並沒有真正受到傷害。
我想這是一樣counting only truthy values in a collection,所以使用identity
功能與過濾器:
(filter identity (map #{\a \e \i \o \u} (seq (char-array "Hello")))
filter identity (map f ...
= (keep f ...
。
> (keep #{\a \e \i \o \u} (seq (char-array "Hello")))
(\e \o)
+1,但爲什麼'(seq(char-array「Hello」))'?爲了簡潔起見,爲什麼不只是「你好」? –
因爲'(seq(char-array「Hello」))'是提問者作爲參數的問題,而且問題不在於此,所以爲什麼要改變它呢? –
哈哈對,這很有道理,我猜應該更仔細地閱讀這個問題。 –
感謝您的回答。我嘗試過,但似乎chars是麻煩的!但後來試圖通過取代真正的?通過char?它的工作! – murtaza52
字符不是僞造的:'(if \ o true false); => true'。謂詞「真?」不測試真實性,它測試值*是否爲「真」*值。在clojure中只有兩個不真實的值是'nil'和'false'。 – mtyaka
我濫用術語真理,對不起。我會修復 –