计算嵌套列表的成对差异

And*_*rea 0 clojure

我有一个由以下各项组成的列表的列表(列始终为5):

(   
 (1 3 2 4 5)   
 (2 5 1 3 1)   
 (0 8 1 2 2)  
 ...  
)
Run Code Online (Sandbox Code Playgroud)

我想获得另一个清单

  • 每个项目都是一个列表
  • 第n个子列表中的第i个项目是原始输入的第n个和第(n + 1)个子列表中的第i个项目之间的差。

在上面的示例中,结果将是:

(   
 (-1 -2 1 1 4)   
 (2 -3 0 1 -1)  
 ... 
)
Run Code Online (Sandbox Code Playgroud)

第一个列表(-1 -2 1 1 4)是在原始输入中获​​取第一和第二个列表的结果

(1 3 2 4 5)
(2 5 1 3 1)

然后减去具有相同索引的元素

(1-2 3-5 2-1 4-3 5-1)

等等。

我怎样才能做到这一点?

ama*_*loy 5

要使用成对的相邻元素,可以传递map两个集合:原始集合和其自身的偏移版本:

(defn diffs [xs]
  (map #(map - % %2) xs (rest xs)))
Run Code Online (Sandbox Code Playgroud)