我正在研究一個Rails模板,並試圖編寫一些代碼,允許我在多個列中填充一個或多個ul標籤「從上到下」和「從左到右」的列我指定。我剛剛得到了Ruby的訣竅,所以我無法弄清楚這一點。我也很好奇這個有用的片段的慣用Haskell版本。改進Clojure的版本加讚賞:你會如何在Ruby和/或Haskell中編寫這個Clojure代碼片段?
(defn table [xs & {:keys [cols direction]
:or {cols 1 direction 'right}}]
(into []
(condp = direction
'down (let [c (count xs)
q (int (/ c cols))
n (if (> (mod c q) 0) (inc q) q)]
(apply map vector (partition n n (repeat nil) xs)))
'right (map vec (partition cols cols (repeat nil) xs)))))
隨着該位的代碼,然後我可以做到以下幾點:
(table (range 10) :cols 3)
打印出來,這會看起來像這樣:
0 1 2
3 4 5
6 7 8
9
而棘手一個:
(table (range 10) :cols 3 :direction 'down)
看起來像這樣:
0 4 8
1 5 9
2 6
3 7
三樣東西,你也許可以改變Clojure的版本 1 。使用defnk(clojure.contrib.def)它有點好看。 2.關鍵字而不是符號 3.而不是做轉換爲向量兩種方式統一它與(vec(地圖vec(condp .....))) – nickik 2011-04-19 14:34:59