我正在研究 Rails 模板,并试图编写一些代码,允许我在我指定的许多列中填充一个表或多列 ul 标签“从上到下”和“从左到右” . 我刚刚掌握了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