¿Cuáles son sus consejos para el golf de código con Clojure?
El objetivo de esta pregunta es recopilar una lista de técnicas que son específicas de Clojure y que se pueden utilizar en problemas generales de código de golf.
¿Cuáles son sus consejos para el golf de código con Clojure?
El objetivo de esta pregunta es recopilar una lista de técnicas que son específicas de Clojure y que se pueden utilizar en problemas generales de código de golf.
Respuestas:
Use la sintaxis del lector para lambdas.
Entonces usa
#(+ % %2 %3)
en lugar de
(fn [x y z] (+ x y z))
También puede eliminar espacios en blanco algunas veces:
#(if (< % 0) (- %) %)
#(if(< % 0)(- %)%)
#(+ % %2 %3)es equivalente a +.
Entre una cuerda y cualquier otra cosa:
(println(+"Hello, World!"1))
Entre paréntesis y cualquier otra cosa:
(for[x(range 5)](* x x))
Entre un número y todo lo que no sean nombres incorporados o variables:
Allowed:
(+ 1"Example")
(map{1"-1"2"-2"}[1 2 3])
Not allowed:
(+1 2)
Entre @(desreferencia para átomos) y paréntesis.
@
letay deshacerse de algunos espacios.
#(+ 1(first%))=#(+ 1 (first %))
Las cadenas se pueden tratar como una secuencia de caracteres
por ejemplo, para ordenar alfabéticamente los caracteres de una cadena:
(sort "hello")
=> (\e \h \l \l \o)
nth ... 0lugar defirstPara obtener el primer elemento de una colección, el uso de (nth ... 0)over firstguarda un byte:
(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)
second(2 bytes)
([2 3 4]1)devuelve el elemento en el índice 1. Esto debería ser beneficioso si, por ejemplo, el formato de entrada es flexible.
Por ejemplo, si necesita usarlo partitiono frequenciesvarias veces, podría ser beneficioso vincularlos a un símbolo de un solo byte en una letmacro. Por otra parte, puede que no valga la pena si no necesita lo letcontrario, y el nombre de la función es relativamente corto.