【发布时间】:2017-09-26 20:09:13
【问题描述】:
对于 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的参数向量。
标签: clojure functional-programming