私は要素によってシーケンスの要素を組み合わせたい、以下の配列にclojureでシーケンスを結合するには?
(def a [1 2 3 4])
(def b [10 20 30 40])
(def c [100 200 300 400])
を持っている:
(... + a b c)
私を与えるために:
[111 222 333 444]
を行うのは利用可能な標準機能がありますそう?あるいは、それを行うための良い慣用方法は何ですか?
私は要素によってシーケンスの要素を組み合わせたい、以下の配列にclojureでシーケンスを結合するには?
(def a [1 2 3 4])
(def b [10 20 30 40])
(def c [100 200 300 400])
を持っている:
(... + a b c)
私を与えるために:
[111 222 333 444]
を行うのは利用可能な標準機能がありますそう?あるいは、それを行うための良い慣用方法は何ですか?
あなたが探している機能はmap
です。
(map + [1 2 3 4] [10 20 30 40] [100 200 300 400])
;=> (111 222 333 444)
あなたの例に示すようmap
がベクトルを怠惰なシーケンスを返し、ないことに注意してください。しかし、into
関数を使用すると、遅延ベクトルを空のベクトルに流すことができます。
(into [] (map + [1 2 3 4] [10 20 30 40] [100 200 300 400]))
;=> [111 222 333 444]
また、(完全性のために、それは別の答えに注目されるよう)Clojureの中で、あなたはベクトルの結果を得るために、(map
と同じ引数で)mapv
を使用することができます1.4.0+。
+1「フレーズを入力する」 – Ashe
あなたは上記のClojure-1.4.0またはを使用している場合、あなたはmapv
を使用することができます。
user> (mapv + [1 2 3 4] [10 20 30 40] [100 200 300 400])
[111 222 333 444]
関数型プログラミングにおける並列理解の特定の行為は通常「ビュン」と記載されています。いくつかの関数型言語は、 "マップ"と組み合わせて使用できる別の "zip"関数を持っていますが、他の言語は "ジップマップ"関数(単に "マップ"と呼ばれることもあります)を提供しています。 Clojureは後者の場合に該当します。 – Aaron