2013-11-20 129 views
2

輸入一個向量我想寫一個函數,給出元素之間的連續差異。理想情況下,該函數應該輸入一個指定第n個差值的向量x和參數n。第一個差異,第二個差異,...,第n個差異的Clojure函數

在樣品形式[XN]

輸入1:[16 10 8 6 4 2] 1(1第一差值)

輸出1:[-6 -2 -2 -2 - 2]

輸入2:[16 10 8 6 4 2] 2

輸出2:[4 0 0 0無無]

符號表示這裏的正在發生的事情樣品2(意味着作爲例證的想法,而不是Clojure代碼)

[ABCDEF] 2

[A-2B + C,B-2C + d,C-2D + E,d-2E + F]

回答

1

同@Shlomi的answer但是有一個可選的步長參數:

(defn diff 
    ([a] 
    (map - (next a) a)) 
    ([a step] 
    (map - (nthnext a step) a))) 

(defn nthdiff 
    ([a n] 
    (nth (iterate diff a) n)) 
    ([a n step] 
    (nth (iterate #(diff % step) a) n))) 
5

在這裏你去:

(def a [16 10 8 6 4 2]) 

(defn diff [a] 
    (map - (rest a) a)) 

(defn diff-n [a n] 
    (nth (iterate diff a) n)) 

(diff-n a 1) ; => (-6 -2 -2 -2 -2) 
(diff-n a 2) ; => (4 0 0 0) 
+0

你怎麼會包括步長與此代碼?由此給出元素b的差異分開的步驟。 – sunspots

+0

我不明白你的意思,你可以嘗試解釋更好嗎? – Shlomi

+0

如果我從上面輸入2的步長輸入2,我將返回輸出2.但是,對於輸入2更改步長爲2將輸出[4 0]。如果我在輸入向量中有l個元素,那麼我應該期望我的輸出具有l-n * Abs(s)元素。在輸入2是l = 6,n = 2,s = 2的情況下,輸出2個元素並將其收集到矢量中。 – sunspots

相關問題