2014-03-06 38 views
2

我知道我可以解決我的問題,循環和重複,但它似乎是這樣一個簡單的(常見?)操作,我想知道是否沒有單一功能clojure或更少的混亂方法然後循環/重複來解決這個問題。我搜索了它,但無法找到一些東西。在輸入遞歸重複函數n次(沒有循環重複)

我正在尋找的功能如下。

(the-function n input some-function) 

其中n是遞歸調用輸入的某個函數的時間數。

一個簡單的例子是:

(the-function 3 1 (fn [x] (+ x 1))) 
=> 4 

就是這樣用Clojure療法什麼?

問候

回答

7

你需要的是基本iterate。它會產生一個無限序列的重複應用程序的一個函數的種子輸入。因此,要複製您在此處描述的行爲,你可以這樣寫:

(nth (iterate some-function input) n) 
+0

完美的事情,正是我一直在找。整個過程很明顯,我仍然忽略它。 – user1782011

1

試試這個:

(defn your-iterate-fn [times init-param the-fn] 
    (last (take (inc times) (iterate the-fn init-param)))) 
(your-iterate-fn 3 1 (fn [x] (+ x 1))) 
==> 4 
+0

謝謝,這也適用,但上面的第n個解決方案更優雅一些。 :) – user1782011