创建一个闭包

时间:2011-09-27 13:27:19

标签: clojure

我想创建一个闭包(函数生成器)来将数字提升为幂,而不使用特定的Clojure库来完成此任务。现在,我可以用循环来做这件事。复发。

(defn exp1
 [in-num in-exp-multi]
 (loop [num in-num exp-multi in-exp-multi]
    (if (> exp-multi 1)
        (recur (* num in-num) (- exp-multi 1))
        num)))

我尝试过使用partial来提高功率,但是我仍然坚持使用重复乘以一些数字所需的构造。所以,我正在寻找一个生成函数并应用x次的例子。

编辑:

这个例子只是用循环来解决问题..复发。我的愿望是用封闭来解决这个问题。

2 个答案:

答案 0 :(得分:7)

我无法从你的问题中准确地告诉你要求的是什么,但也许这个?

(defn powers-of [exponent]
  (iterate #(* % exponent) 1))

(defn nth-power-of [exponent]
  (partial nth (powers-of exponent)))

((nth-power-of 5) 2) ;; returns 25

我认为iterate是您根据描述寻找的内容;它会为种子创建一个懒惰的函数seq。

答案 1 :(得分:2)

这将返回两个参数的闭包 -

(defn exp1
 [in-num in-exp-multi]
 (fn []
   (loop [num in-num exp-multi in-exp-multi]
    (if (> exp-multi 1)
      (recur (* num in-num) (- exp-multi 1))
      num))))