clojure 函数名作为参数
clojure function name as argument
我需要制作循环方法,它以一些方法名称和循环次数作为参数。
问题是,我不能使用任何突变(def、let 等)以及标准的 clojure 函数,除了 if、inc、dec、println、+、-、= 等
仅限 SEQ 和递归 !!!
我的例子:
;; F = some function name, for example, inc, dec, println and etc.
(defn my-loop [f n]
(if (= n 0)
f
(my-loop f (dec n))))
;; Returns 2, instead of 3, because on next iteration argument F = nil :(
(my-loop (inc 1) 2)
显然,当调用递归时,参数 F 为 NIL,所以我如何在调用递归时 return 相同的参数(没有硬编码)。
(letfn [(my-loop [f n result]
(if (< n 1) result
(recur f (dec n) (f result))))]
(my-loop inc 2 1))
感谢帮助,我的解决方法是:
(defn my-loop [f n result]
(if (< n 1)
result
(my-loop f (dec n) (f result))))
(my-loop inc 2 1)
我需要制作循环方法,它以一些方法名称和循环次数作为参数。
问题是,我不能使用任何突变(def、let 等)以及标准的 clojure 函数,除了 if、inc、dec、println、+、-、= 等
仅限 SEQ 和递归 !!!
我的例子:
;; F = some function name, for example, inc, dec, println and etc.
(defn my-loop [f n]
(if (= n 0)
f
(my-loop f (dec n))))
;; Returns 2, instead of 3, because on next iteration argument F = nil :(
(my-loop (inc 1) 2)
显然,当调用递归时,参数 F 为 NIL,所以我如何在调用递归时 return 相同的参数(没有硬编码)。
(letfn [(my-loop [f n result]
(if (< n 1) result
(recur f (dec n) (f result))))]
(my-loop inc 2 1))
感谢帮助,我的解决方法是:
(defn my-loop [f n result]
(if (< n 1)
result
(my-loop f (dec n) (f result))))
(my-loop inc 2 1)