母音を返す関数を以下に示します。ただし、真実の値のみを返したいのですが、どうすればよいですか?
(map #{\a \e \i \o \u} (seq (char-array "Hello"))) => (nil \e nil nil \o)
母音を返す関数を以下に示します。ただし、真実の値のみを返したいのですが、どうすればよいですか?
(map #{\a \e \i \o \u} (seq (char-array "Hello"))) => (nil \e nil nil \o)
filter identity (map f ...
= (keep f ...
.
> (keep #{\a \e \i \o \u} (seq (char-array "Hello")))
(\e \o)
これは、コレクション内の真の値のみをカウントすることと同じだと思うので、identity
フィルターで関数を使用します。
(filter identity (map #{\a \e \i \o \u} (seq (char-array "Hello")))
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"))
ませんが、実際には害はありません。