Каковы ваши советы по игре в гольф с использованием Clojure?
Цель этого вопроса - собрать список техник, которые специфичны для Clojure и могут быть использованы в общих задачах по коду.
Каковы ваши советы по игре в гольф с использованием Clojure?
Цель этого вопроса - собрать список техник, которые специфичны для Clojure и могут быть использованы в общих задачах по коду.
Ответы:
Используйте синтаксис читателя для лямбд.
Так что используйте
#(+ % %2 %3)
вместо того
(fn [x y z] (+ x y z))
Вы также можете устранить пробелы в некоторых случаях:
#(if (< % 0) (- %) %)
#(if(< % 0)(- %)%)
#(+ % %2 %3)
эквивалентно +
.
Между строкой и чем-либо еще:
(println(+"Hello, World!"1))
Между скобками и прочим:
(for[x(range 5)](* x x))
Между числом и всем, кроме встроенных или имен переменных:
Allowed:
(+ 1"Example")
(map{1"-1"2"-2"}[1 2 3])
Not allowed:
(+1 2)
Между @
(разыменование для атомов) и скобками.
@
let
и избавиться от некоторых пробелов.
#(+ 1(first%))
=#(+ 1 (first %))
Строки могут рассматриваться как последовательность символов
например, отсортировать символы в строке по алфавиту:
(sort "hello")
=> (\e \h \l \l \o)
nth ... 0
вместоfirst
Чтобы получить первый элемент коллекции, используйте (nth ... 0)
over для first
сохранения байта:
(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)
second
(2 байта)
([2 3 4]1)
возвращает элемент с индексом 1. Это должно быть полезно, если, например, формат ввода гибкий.
Например, если вам нужно использовать partition
или frequencies
несколько раз, было бы полезно связать их с однобайтовым символом в let
макросе. Опять же, это может не стоить того, если вам не нужно let
иное, а имя функции относительно короткое.