我有一个由下列项目组成的列表(列为5,始终如此):
(
(1 3 2 4 5)
(2 5 1 3 1)
(0 8 1 2 2)
...
)我想获得另一份名单
在上面的例子中,结果是:
(
(-1 -2 1 1 4)
(2 -3 0 1 -1)
...
)第一个列表(-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)
诸若此类。
我该怎么做?
发布于 2019-10-04 16:54:34
要处理相邻元素对,可以传递两个map集合:原始集合和其自身的偏移版本:
(defn diffs [xs]
(map #(map - % %2) xs (rest xs)))发布于 2019-10-04 18:10:16
阿美比我早,但既然我已经开始这里是一个版本使用的减少。由于我们必须将大量的信息保存在累加器中,这太复杂了:
(first ; we are only interested in the accumulator, hence the outer 'first'
(reduce (fn [[acc prev] curr] [(conj acc (mapv - prev curr)) curr])
[[] (first test)]
(rest test)))和一个更干净的版本,基本上是相同的,上面的答案(我喜欢他更多)。
(map (fn [[v1 v2]] (map - v1 v2))
(partition 2 1 test))https://stackoverflow.com/questions/58240381
复制相似问题