Clojure地图般的流通功能
问题描述:
我在Clojure写了一个简单的照片库应用程序。我有一个library
地图,其中有:photos
密钥,它是一个照片地图的矢量。然后,我有一个功能可以将照片添加到库中 - 它将图库对象和照片添加为参数。Clojure地图般的流通功能
(defn add-to-library [library photo]
...
)
它返回library
映射,并添加photo
。
现在,我想将这个功能“映射”到照片列表上。我需要能够将library
对象从一个迭代传递到下一个迭代。
在Clojure中做这件事的惯用方式是什么?
答
Try:
(reduce add-to-library library list-of-photos)
。
reduce
功能非常好,而且是一个通用的工具,可以令人惊讶地适用于很多特定的情况。其中许多情况与您的情况类似,您拥有“收集的东西”,“为该收藏添加东西的功能”以及“要添加的东西列表”。如果第一次了解reduce
,这可能不是起始材料,但我发现它很有趣:http://clojure.com/blog/2012/05/08/reducers-a-library-and-model-for-collection-processing.html