Я работал над шаблоном Rails и пытался написать немного кода, который позволяет мне заполнять таблицу или несколько столбцов ярлыков "top-to-bottom" и "left-right-right" на любом из многих столбцы, которые я указываю. Я просто получаю рубины, поэтому я не мог понять это. Мне также интересна идиоматическая версия 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