为什么reduce函数以相反的顺序产生结果?

时间:2017-09-18 05:15:00

标签: clojure

我正在尝试通过reduce函数实现map函数。我正在按照Rich Hickey在传感器上所做的演示中编写的示例代码。

{{1}}

但是我无法理解为什么列表以相反的顺序映射?

1 个答案:

答案 0 :(得分:4)

这是因为cons将项目放在seq的前面。见https://clojuredocs.org/clojure.core/cons

(cons x seq)
  

返回一个新的seq,其中x是第一个元素,seq是     其余的。

因此,在您的情况下,1将增加到2,然后将其放到空列表的开头,并显示'(2)。 reduce函数要处理的下一个值是2。它将增加到3,然后放在'(2)的开头,给出'(3 2),依此类推......

请注意,我的语言有点松散:每次调用reduce函数时都会返回一个新的seq,即cons每次调用时都会创建一个新列表。