Além disso, você pode usar vetores como funções, portanto, ([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.
NikoNyrh
1
Use aplicar em vez de reduzir
Por exemplo, #(apply + %)um byte é menor que #(reduce + %).
;; if n=3 then A else B
(if (= 3 n) A B) ; (if(=3n)AB)
({3 A} n B) ; ({3A}nB) -> -3 chars
;; if n=2 or n=3 then A else B
(if (#{2 3} n) A B) ; (if(#{23}n)AB)
({2 A 3 A} n B) ; ({2A3A}nB) -> -4 chars
Vincule nomes de função longos em let a um símbolo de byte único
Por exemplo, se você precisa usar partitionou frequenciesvárias vezes, poderia ser benéfico para ligá-los a um símbolo de byte único em uma letmacro. Então, novamente, pode não valer a pena se você não precisar do letcontrário, e o nome da função é relativamente curto.
Respostas:
Use a sintaxe do leitor para lambdas.
Então use
ao invés de
Você também pode eliminar o espaço em branco algumas vezes:
fonte
#(+ % %2 %3)
é equivalente a+
.Onde você pode remover o espaço em branco:
Entre uma string e qualquer outra coisa:
Entre colchetes e qualquer outra coisa:
Entre um número e tudo que não sejam nomes internos ou variáveis:
Entre
@
(desreferência para átomos) e colchetes.fonte
@
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:
fonte
Use em
nth ... 0
vez defirst
Para obter o primeiro elemento de uma coleção, usar
(nth ... 0)
overfirst
salva um byte:fonte
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.Use aplicar em vez de reduzir
Por exemplo,
#(apply + %)
um byte é menor que#(reduce + %)
.fonte
Evite deixar se você já tiver um
Por exemplo: em
#(for[a[(sort %)]...)
vez de#(let[a(sort %)](for ...))
.Pois também tem uma
:let
construção, mas é muito detalhada para o código de golfe.fonte
Use
+
e em-
vez deinc
edec
Isso economiza 1 byte se você estiver usando
inc
/dec
em uma expressão com parens:fonte
Use mapas em vez de
if
s ao testar a igualdadefonte
Vincule nomes de função longos em let a um símbolo de byte único
Por exemplo, se você precisa usar
partition
oufrequencies
várias vezes, poderia ser benéfico para ligá-los a um símbolo de byte único em umalet
macro. Então, novamente, pode não valer a pena se você não precisar dolet
contrário, e o nome da função é relativamente curto.fonte
Use para em vez de mapa
Por exemplo,
#(for[i %](Math/abs i))
é muito menor que omap
equivalente.fonte