HotShot51015
HotShot51015

Reputation: 31

Why is this lazy-sequence not printing?

I cannot figure out why this lazy-sequence is not printing. I've looked at other posts on here (such as this) and none seem to be exactly what I am looking for. Here is the code segment...

(defn exp [x n]
    (reduce * (repeat n x))
)

(defn primes
    ([] (primes 1 1))
    ([n m] (if (= n 1) (lazy-seq (cons (* (exp 7 n) (exp 11 m)) (primes (+ m 1) (1))))
        (lazy-seq (cons (* (exp 7 n) (exp 11 m)) (primes (- n 1) (+ m 1)))))
    )
)

(take 4 (primes))

Any help is greatly appreciated. Thank you!

Upvotes: 1

Views: 227

Answers (1)

Chris Murphy
Chris Murphy

Reputation: 6509

The three comments really give the answer. But always good to actually see the code, so here are two ways that give the printed output.

(defn exp [x n]
  (reduce * (repeat n x)))

(defn primes
  ([] (primes 1 1))
  ([n m] (if (= n 1)
           (lazy-seq (cons (* (exp 7 n) (exp 11 m)) (primes (+ m 1) 1)))
           (lazy-seq (cons (* (exp 7 n) (exp 11 m)) (primes (- n 1) (+ m 1)))))))

(defn x-1 []
  (doseq [prime (take 4 (primes 2 2))]
    (println prime)))

(defn x-2 []
  (->> (primes 2 2)
       (take 4)
       (apply println)))

Upvotes: 2

Related Questions