以下の例は、同じ出力を生成しています。Clojureのseqとシーケンスの違いは何ですか?
(seq [1 2 3 4])
=> (1 2 3 4)
(sequence [1 2 3 4])
=> (1 2 3 4)
以下の例は、同じ出力を生成しています。Clojureのseqとシーケンスの違いは何ですか?
(seq [1 2 3 4])
=> (1 2 3 4)
(sequence [1 2 3 4])
=> (1 2 3 4)
差がseq
戻り、空のコレクションのnil
ながらsequence
は常に、(その場合には、空のリスト)コレクションが空であっても、配列を返すことです。またsequence
はtransducersと一緒に使用できます。
Aは、ソースコードに見て:
user=> (source sequence)
(defn sequence
"Coerces coll to a (possibly empty) sequence, if it is not already
one. Will not force a lazy seq. (sequence nil) yields(), ..."
([coll]
(if (seq? coll) coll
(or (seq coll)())))
...
それはまだ、配列ではなく、コレクションがnil
た場合は空のリストを返すのであれば専用のコレクションでsequence
を呼び出すと、コレクションにseq
を呼び出します。
まず、彼らは違った空のシーケンスの引数を扱う:
のClojure:また
user> (seq nil) nil user> (seq()) nil user> (sequence()) () user> (sequence nil) ()
sequence
は、ドキュメントのようトランスデューサを操作するための追加アリティを持っています。コア/配列
既に いずれでもない場合1.0 において[コル]
【のXFormsコル]
【のXFormsコル& colls]
が追加され、(おそらく空の)配列にコルを強制します。怠惰なseqを強制しません。 (シーケンスnil)yields()、 トランスデューサが供給されると、 のアプリケーションの遅延シーケンスをcoll内のアイテム、つまり各collの最初の アイテムのセットに返します。いずれかのコレットが使い果たされるまで、各コレットには2番目の のアイテムがあります。 他のcollの残りのアイテムは無視されます。 1.0 戻りコレクションの配列に
clojure.core /配列
[蔵]
追加 数の-colls引数を受け取る必要があります変換。コレクションが であれば、nilを返します。 (seq nil)はnilを返します。 seqも で動作します。文字列、(参照型の)ネイティブJava配列、およびIterableを実装するオブジェクト 。 seqsは値をキャッシュするので、seq は反復子が同じで反復可能な同じ反復可能オブジェクトを返す反復子がある場合は使用しないでください。
[これは返信](http://clojuredocs.org/clojure.core/seq)[ドキュメント内](http://clojuredocs.org/clojure.core/sequence)だと思います。 – m0skit0