如何将两个参数函数映射到列表?

Amo*_*kar 8 clojure

我有一个元素列表,其中包含一些值.

我想将它映射到一个函数并生成一个列表,该列表包含通过将这两个参数函数应用于第一个列表中的连续值而计算的值.

此列表将减少一个元素.

映射函数应该一次取两个参数.

编辑

我使用的两个参数函数非常复杂,所以为简单起见,我们假设它是一个计算两个数的平均值的函数.

如果我有一个清单:[3 8 11 14 19 20 88].

我有可能写一个映射我的average函数的函数,(average 3 8)它将给出 5.5

因为(average 8 11)会给9.5

(average 11 14)会给12.5

等等...

将平均值应用于列表中的两个连续值应该给我.

[5.5 9.5 12.5 16.5 19.5 54.0]
Run Code Online (Sandbox Code Playgroud)

结果.

map将单个参数函数应用于整个列表,并生成具有完全相同元素数的新列表.

我想要的是一种应用我的函数的方法,它接受两个参数一次连续两次,将我的函数应用于它并将结果添加到新列表.

Leo*_*tny 14

你可以用地图做到:

(map f coll (rest coll))
Run Code Online (Sandbox Code Playgroud)

  • 因此,它从传递的每个列表中选择一个参数?直到列表之一结束?`-是的,完全正确。传递的fn必须使用与传递给map的seq一样多的参数。 (2认同)

Ali*_*Lee 7

(fn [f coll] (map #(apply f %1) (partition 2 1 coll)) 
Run Code Online (Sandbox Code Playgroud)

现在直接进入4clojure!

  • 大!btw`#(apply f%1)`可以改为`(部分应用f)` (5认同)