escribí esta función que hace esto (más fácil mostrar que explique):¿Cuál es la forma más idiomática de Clojure para escribir esto?
(split 2 (list 1 2 3 4 5 6))
=> ((1 2) (2 3) (3 4) (4 5) (5 6))
(defn split [n xs]
(if (> (count xs) (dec n))
(cons (take n xs) (split n (rest xs)))
'()))
entiendo que en Clojure la lista no es la única estructura primeros datos de clase. ¿Tendría sentido escribir esta estructura de datos-agnóstica? Y a pesar de ello, ¿mi implementación es la más eficiente y, en caso negativo, cómo la haré más eficiente y/o idiomática?
Gracias!
Limpio, gracias por la sugerencia. Hacer ese cambio único, contar la 'toma n' en lugar de la secuencia, hasta la versión repetida/recurrente redujo el tiempo de 3000ms a 20ms para un rango de 10k ...Tendré que recordar que next/rest devuelve una secuencia, donde count es O (n). –