Quais são as suas dicas para jogar código com o Clojure?
O objetivo desta pergunta é coletar uma lista de técnicas específicas do Clojure e que podem ser usadas em problemas gerais de golfe com código.
Quais são as suas dicas para jogar código com o Clojure?
O objetivo desta pergunta é coletar uma lista de técnicas específicas do Clojure e que podem ser usadas em problemas gerais de golfe com código.
Respostas:
Use a sintaxe do leitor para lambdas.
Então use
#(+ % %2 %3)
ao invés de
(fn [x y z] (+ x y z))
Você também pode eliminar o espaço em branco algumas vezes:
#(if (< % 0) (- %) %)
#(if(< % 0)(- %)%)
#(+ % %2 %3)
é equivalente a +
.
Entre uma string e qualquer outra coisa:
(println(+"Hello, World!"1))
Entre colchetes e qualquer outra coisa:
(for[x(range 5)](* x x))
Entre um número e tudo que não sejam nomes internos ou variáveis:
Allowed:
(+ 1"Example")
(map{1"-1"2"-2"}[1 2 3])
Not allowed:
(+1 2)
Entre @
(desreferência para átomos) e colchetes.
@
let
e se livrar de alguns espaços.
#(+ 1(first%))
=#(+ 1 (first %))
Strings podem ser tratadas como uma sequência de caracteres
por exemplo, para classificar os caracteres em uma string em ordem alfabética:
(sort "hello")
=> (\e \h \l \l \o)
nth ... 0
vez defirst
Para obter o primeiro elemento de uma coleção, usar (nth ... 0)
over first
salva um byte:
(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)
second
(2 bytes)
([2 3 4]1)
retorna o elemento no índice 1. Isso deve ser benéfico se, por exemplo, o formato de entrada for flexível.
Por exemplo, se você precisa usar partition
ou frequencies
várias vezes, poderia ser benéfico para ligá-los a um símbolo de byte único em uma let
macro. Então, novamente, pode não valer a pena se você não precisar do let
contrário, e o nome da função é relativamente curto.