我正在尝试通过reduce函数实现map函数。我正在按照Rich Hickey在传感器上所做的演示中编写的示例代码。
{{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
每次调用时都会创建一个新列表。