Создание закрытия - PullRequest
       0

Создание закрытия

3 голосов
/ 27 сентября 2011

Я хочу создать замыкание (генератор функций) для возведения числа в степень, без использования специальной библиотеки Clojure для выполнения этой задачи.Прямо сейчас я могу сделать это с помощью цикла .. recur.

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

Я пытался использовать частичное для повышения мощности, но все еще застрял на конструкции, необходимой для повторения умножения числа на некоторое числораз.Итак, я ищу пример генерации функции и применения ее x раз.

Edit:

Пример был просто для решения проблемы с помощью цикла .. recur.Я хочу решить это с закрытием.

Ответы [ 2 ]

7 голосов
/ 27 сентября 2011

Я не могу точно сказать из вашего вопроса, что вы просите, но, может быть, это?

(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 - это то, что вы ищете, основываясь на вашем описании; это создает ленивый последующий шаг функции, примененной снова и снова к семени.

2 голосов
/ 27 сентября 2011

Возвращает закрытие для обоих аргументов -

(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))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...