Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure函数名作为参数_Clojure - Fatal编程技术网

clojure函数名作为参数

clojure函数名作为参数,clojure,Clojure,我需要创建一个循环方法,它以一些方法名和循环次数作为参数 问题是,除了if、inc、dec、println、+、-、=等,我不能使用任何突变(def、let等)以及标准clojure函数 仅使用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

我需要创建一个循环方法,它以一些方法名和循环次数作为参数

问题是,除了if、inc、dec、println、+、-、=等,我不能使用任何突变(def、let等)以及标准clojure函数

仅使用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,所以当调用递归时,我如何返回相同的参数(没有硬代码)。

(letfn[(我的循环[fn result]
(如果(
谢谢您的帮助,我的解决方案是:

(defn my-loop [f n result]
(if (< n 1)
  result
(my-loop f (dec n) (f result))))

(my-loop inc 2 1)
(定义我的循环[f n结果]
(如果(
SEQ,我的意思是:next()、first()、SEQ()。您正在寻找
(last(take 5(iterate inc 13)))
?不幸的是,不,我不能使用last、take、iterate和其他标准函数。如果这个标准clojure函数是我自己编写的(也没有标准clojure函数),我只能在这种情况下使用这种方法,所以我需要自己编写所有标准clojure函数alghoritm,只使用SEQ和递归。非常感谢,为我做了很多工作。我的解决方案:`(定义我的循环[fn结果](如果((defn my-loop [f n result] (if (< n 1) result (my-loop f (dec n) (f result)))) (my-loop inc 2 1)