为什么这个懒人序列不能打印?

时间:2017-05-01 03:42:59

标签: clojure lazy-sequences cons take

我无法弄清楚为什么这个懒惰的序列没有打印。我看过这里的其他帖子(例如this),似乎没有一个正是我想要的。这是代码段......

(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))

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

这三条评论确实给出了答案。但实际上看到代码总是很好,所以这里有两种方法可以提供打印输出。

(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)))