Clojure函数用于第一个差异,第二个差异,......,第n个差异

sun*_*ots 2 clojure clojure-contrib

输入一个向量我想写一个函数,给出元素之间的连续差异.理想情况下,函数应输入向量x和指定第n个差异的参数n.

样本[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 nil nil]

象征性地,这里是样本2的内容(意思是说明,而不是Clojure代码)

[abcdef] 2

[a-2b + c,b-2c + d,c-2d + e,d-2e + f]

Shl*_*omi 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)
Run Code Online (Sandbox Code Playgroud)