¿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.
@
let
ay 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 ... 0
lugar defirst
Para obtener el primer elemento de una colección, el uso de (nth ... 0)
over first
guarda 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 partition
o frequencies
varias veces, podría ser beneficioso vincularlos a un símbolo de un solo byte en una let
macro. Por otra parte, puede que no valga la pena si no necesita lo let
contrario, y el nombre de la función es relativamente corto.