Estaba trabajando en una plantilla de Rails y estaba tratando de escribir un código que me permite completar una tabla o varias columnas de etiquetas ul "de arriba a abajo" y "de izquierda a derecha" en todas las columnas Lo especifico Solo estoy entendiendo a Ruby, así que no pude resolver esto. También tengo curiosidad acerca de una versión idiomática de Haskell para este fragmento útil. Mejoras en la versión Clojure apreciadas:¿Cómo escribirías este fragmento de Clojure en Ruby y/o Haskell?
(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)))))
Con este fragmento de código que se puede hacer lo siguiente:
(table (range 10) :cols 3)
imprime este se vería así:
0 1 2
3 4 5
6 7 8
9
Y el más complicado uno:
(table (range 10) :cols 3 :direction 'down)
Parece que sí:
0 4 8
1 5 9
2 6
3 7
tres cosas que tal vez podría cambiar en la versión clojure 1 . Utilice defnk (clojure.contrib.def) es un poco agradable de leer. 2. palabras clave en lugar de símbolos 3. en lugar de hacer la conversión a vectores de dos maneras unificarlo con (vec (map vec (condp .....))) – nickik