次のように、clojure でシーケンスの適切なヘッド/テール分解を取得できることを示す例をいくつか見ます。
(if-let [[x & xs] (seq coll)]
ただし、これは値をベクトルに入れるため、遅延シーケンスでは期待どおりに機能しないと思いますが、これは遅延ではありません。ベクトル形式をリスト形式に変更しようとしましたが、引用されているかどうかにかかわらず、バインディング エラーが発生しました。
このようなバインディングがなければ、各要素が前の要素の計算集約的な方程式である遅延シーケンスを取得した場合、頭と尾を別々のステートメントとして取得するためにその計算を 2 回行う必要があるようです。右?
(let [head (first my-lazy-seq) ;; has to calculate the value of head.
tail (rest my-lazy-seq)] ;; also has to calculate the value of head to prepare the rest of the sequence.
これを回避する方法はありますか、それともどこかで間違った仮定をしていますか?