1

私は 4clojure の問題に取り組んでいますが、同様の問題が発生し続けています。1 つを除くすべてのテスト ケースで機能するソリューションを作成します。通常、遅延評価をチェックしているものです。以下の解決策は、最後のテスト ケースを除くすべてのテスト ケースで機能します。私はあらゆる種類の解決策を試しましたが、整数オーバーフローまで評価を停止するようには見えません。Joy of Clojure の遅延シーケンスに関する章を読みましたが、それらを実装するのに苦労しています。ループなどを使用しないなど、私が忘れている経験則はありますか?

; This version is non working at the moment, will try to edit a version that works
(defn i-between [p k coll]
  (loop [v [] coll coll]
     (let [i (first coll) coll (rest coll) n (first coll)]
        (cond (and i n)
          (let [ret (if (p i n) (cons k (cons i v)) (cons i v))]
            (recur ret coll))
          i
          (cons i v )
        :else  v))))

問題132

好奇心旺盛な人のための究極のソリューション:

(fn i-between [p k coll]
  (letfn [(looper [coll]
     (if (empty? coll) coll
       (let [[h s & xs] coll 
          c (cond (and h s (p h s))
                   (list h k )
                  (and h s)
                   (list h )
                  :else (list h))]
          (lazy-cat c (looper (rest coll))))
   ))] (looper coll)))
4

1 に答える 1