Quels sont vos conseils pour jouer au golf à l'aide de Clojure?
Le but de cette question est de rassembler une liste de techniques spécifiques à Clojure et pouvant être utilisées dans des problèmes généraux de golf de code.
Quels sont vos conseils pour jouer au golf à l'aide de Clojure?
Le but de cette question est de rassembler une liste de techniques spécifiques à Clojure et pouvant être utilisées dans des problèmes généraux de golf de code.
Réponses:
Utilisez la syntaxe du lecteur pour les lambdas.
Alors utilisez
#(+ % %2 %3)
au lieu de
(fn [x y z] (+ x y z))
Vous pouvez également éliminer les espaces blancs une partie du temps:
#(if (< % 0) (- %) %)
#(if(< % 0)(- %)%)
#(+ % %2 %3)
est équivalent à +
.
Entre une chaîne et autre chose:
(println(+"Hello, World!"1))
Entre parenthèses et toute autre chose:
(for[x(range 5)](* x x))
Entre un nombre et tout autre que les noms intégrés ou variables:
Allowed:
(+ 1"Example")
(map{1"-1"2"-2"}[1 2 3])
Not allowed:
(+1 2)
Entre @
(déréférence pour les atomes) et crochets.
@
let
et vous débarrasser de certains espaces.
#(+ 1(first%))
=#(+ 1 (first %))
Les chaînes peuvent être traitées comme une séquence de caractères
par exemple pour trier les caractères d'une chaîne par ordre alphabétique:
(sort "hello")
=> (\e \h \l \l \o)
nth ... 0
au lieu defirst
Pour obtenir le premier élément d'une collection, l'utilisation de (nth ... 0)
over first
enregistre un octet:
(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)
second
(2 octets)
([2 3 4]1)
renvoie l'élément à l'index 1. Cela devrait être avantageux si, par exemple, le format d'entrée est flexible.
Par exemple , si vous devez utiliser partition
ou frequencies
plusieurs fois, il pourrait être bénéfique pour les lier à un symbole unique octet dans une let
macro. Là encore, cela ne vaut peut-être pas la peine si vous n'avez pas besoin du let
contraire, et le nom de la fonction est relativement court.