我目前正在Racket / Scheme学习入门课程,并且目前正在研究地图,应用和折叠。在大多数情况下,我一直认为map只能在接受单个参数的lambda上工作。但是,对于某些问题,我发现绕过这个问题非常有用-例如,具有一个可以映射到列表的函数,同时还带有一个累加器,该累加器针对每个递归函数调用进行独立更新。尽管由于担心违反荣誉代码而无法提供比这更具体的信息,但是如果您打算使用map,是否有任何方法可以避免给每个递归调用一个累加器?
答案 0 :(得分:4)
map
可以选择任意数量的列表:
(map + '(1 2 3) '(3 2 1) '(3 3 3)) ; ==> (7 7 7)
fold
有一个累加器:
(foldl (lambda (a b c acc) (+ a b c acc)) 1 '(1 2 3) '(3 2 1) '(3 3 3)) ; ==> 22