本題の前に、前回のコードを少し書き換えた*1ので、まずはそちらから。 ♯エラトステネスの無限の篩 Ver.1 アルゴリズム上の変更点は倍数リスト*2を「n を除く n の倍数」ではなく、「n^2 を初期値とする n の倍数」にしただけです。 (defn- diff-seq [s1 s2] (let [x1 (first s1), x2 (first s2)] (cond (= x1 x2) (recur (rest s1) (rest s2)) (> x1 x2) (recur s1 (drop-while (partial > x1) s2)) (< x1 x2) (let [[s1a s1b] (split-with (partial > x2) s1)] (lazy-cat s1a (diff-seq s1b s2)))))) (defn- arithmetic-seq [start