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

これは、コレクション内の真の値のみをカウントすることと同じだと思うので、identityフィルターで関数を使用します。

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

nil 以外のフィルタ

(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 #{\a \e \i \o \u} "Hello")
(\e \o)         

ps: 文字列はすでにシーケンスであるため、厳密にはビットは必要あり(seq (char-array "Hello"))ませんが、実際には害はありません。

于 2012-09-20T18:07:05.463 に答える