我們應該知道,Clojure的map
可以應用到一個序列:我是否在重新發明(方形)車輪?
(map #(* %1 %1) [1 2 3]) ; (1)
..或一個以上的,以這樣的方式
(map vector [0 1] [2 1]) ; (2)
;=> ([0 2] [1 1])
現在我想獲得相同的結果作爲(2),但我有參數存儲在一個序列。換句話說,下面沒有得到期望的結果:
(map vector [[0 1] [2 1]]) ; (3)
;=> ([[0 1]] [[2 1]])
所以我寫了這個簡單的宏,其中UMAP代表「unsplice圖」:
(defmacro umap [fun args-list]
"umap stands for unspliced map.
Let args-list be a list of args [a1 a2 ... an].
umap is the same of (map fun a1 a2 .. an)"
`(map ~fun [email protected]))
顯然它像一個魅力:
(umap vector [[0 1] [2 1]]) ; (4)
;=> ([0 2] [1 1])
所以這裏是我的問題:我是否在重新發明輪子? 還有另外一種方法可以像(4)一樣做嗎?
再見和感謝提前,
阿爾弗雷多
謝謝,我確定我是在重新發明輪子:) – 2011-04-08 16:29:11