對Clojure和一般編程來說還是很新的,所以請原諒這個愚蠢的問題。如何從Clojure中的條件循環中返回一個惰性序列?
的問題是:
查找n和k,使得數多達n(不包括)的總和等於數從n + 1個的總和至k(含)。
我的解決方案(其中正常工作)是定義了以下功能:
(defn addd [x] (/ (* x (+ x 1)) 2))
(defn sum-to-n [n] (addd(- n 1)))
(defn sum-to-k [n=1 k=4] (- (addd k) (addd n)))
(defn is-right[n k]
(= (addd (- n 1)) (sum-to-k n k)))
然後運行下面的循環:
(loop [n 1 k 2]
(cond
(is-right n k) [n k]
(> (sum-to-k n k) (sum-to-n n))(recur (inc n) k)
:else (recur n (inc k))))
這隻能返回一個答案,但如果我手動集合n k我可以得到不同的值。但是,我想定義一個返回所有值的惰性序列的函數,以便:
(= [6 8] (take 1 make-seq))
如何儘可能有效地執行此操作?我嘗試了各種各樣的東西,但沒有多少運氣。
感謝
:編輯:
我想我想出了做一個更好的方式,但它的回報「讓應該是一個載體」。 Clojure的文檔是沒有太大的幫助......
繼承人的新代碼:
(defn calc-n [n k]
(inc (+ (* 2 k) (* 3 n))))
(defn calc-k [n k]
(inc (+ (* 3 k)(* 4 n))))
(defn f
(let [n 4 k 6]
(recur (calc-n n k) (calc-k n k))))
(take 4 (f))
在你的編輯中,你缺少'f'的參數向量。 – madstap