【问题标题】:Why is this lazy-sequence not printing?为什么这个惰性序列不打印?
【发布时间】:2017-05-01 03:42:58
【问题描述】:

我不知道为什么这个惰性序列没有打印出来。我看过这里的其他帖子(例如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))

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

【问题讨论】:

  • 你在任何地方都没有print,所以它没有被打印出来。
  • 因为它很懒! ;)
  • (1) 是一个错误。您并不是要将 1 作为函数调用。
  • 你想打印什么?

标签: clojure lazy-sequences cons take


【解决方案1】:

三个cmets真的给出了答案。但实际看到代码总是好的,所以这里有两种方法可以提供打印输出。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多