2016-08-10 13 views

答えて

4

差がseq戻り、空のコレクションのnilながらsequenceは常に、(その場合には、空のリスト)コレクションが空であっても、配列を返すことです。またsequencetransducersと一緒に使用できます。

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を呼び出します。

2

まず、彼らは違った空のシーケンスの引数を扱う:

の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 は反復子が同じで反復可能な同じ反復可能オブジェクトを返す反復子がある場合は使用しないでください。

関連する問題