4

どうすればClojureでseqを怠惰に「クローン」できますか。の線に沿った何か

(let [[s1 s2] (clone-seq s)]
 ...)

s1とs2がsに裏打ちされた独立したシーケンスであるように?

4

1 に答える 1

9

seqの「クローン作成」は私には間違っていると感じます。通常のClojureの使用法では、seqは不変であると予想されるため、次のようなことを行うだけでまったく問題ありません。

(let [s1 s
      s2 s]
   .....)

seqが変更可能であるか、トラバース時に何らかの副作用がある場合、さまざまな理由で問題が発生する可能性があります。変更可能なSeqは、Clojureのような関数型言語には適していない傾向があります。あらゆる種類の奇妙な問題に遭遇します。たとえば、seqを「クローン」したときに、副作用が2回発生するようにしますか?すべてのコンテンツのディープクローンも必要ですか?

于 2012-12-05T14:10:47.840 に答える