Apa tips Anda untuk bermain golf kode menggunakan Clojure?
Tujuan dari pertanyaan ini adalah untuk mengumpulkan daftar teknik yang khusus untuk Clojure dan dapat digunakan dalam masalah golf kode umum.
Apa tips Anda untuk bermain golf kode menggunakan Clojure?
Tujuan dari pertanyaan ini adalah untuk mengumpulkan daftar teknik yang khusus untuk Clojure dan dapat digunakan dalam masalah golf kode umum.
Jawaban:
Gunakan sintaks pembaca untuk lambdas.
Jadi gunakan
#(+ % %2 %3)
dari pada
(fn [x y z] (+ x y z))
Anda juga dapat menghilangkan spasi putih beberapa waktu:
#(if (< % 0) (- %) %)
#(if(< % 0)(- %)%)
#(+ % %2 %3)
setara dengan +
.
Antara string dan apa pun:
(println(+"Hello, World!"1))
Antara kurung dan yang lainnya:
(for[x(range 5)](* x x))
Antara angka dan segala sesuatu selain bawaan atau nama variabel:
Allowed:
(+ 1"Example")
(map{1"-1"2"-2"}[1 2 3])
Not allowed:
(+1 2)
Antara @
(referensi untuk atom) dan tanda kurung.
@
let
dan menyingkirkan beberapa ruang.
#(+ 1(first%))
=#(+ 1 (first %))
String dapat diperlakukan sebagai urutan karakter
mis. untuk mengurutkan karakter dalam string berdasarkan abjad:
(sort "hello")
=> (\e \h \l \l \o)
nth ... 0
sebagai gantifirst
Untuk mendapatkan elemen pertama koleksi, menggunakan (nth ... 0)
lebih dari first
satu byte:
(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)
second
(2 byte)
([2 3 4]1)
mengembalikan elemen pada indeks 1. Ini harus bermanfaat jika misalnya format input fleksibel.
Sebagai contoh jika Anda perlu menggunakan partition
atau frequencies
beberapa kali, itu bisa bermanfaat untuk mengikatnya ke simbol byte tunggal di let
makro. Kemudian lagi mungkin tidak layak jika Anda tidak membutuhkan yang let
sebaliknya, dan nama fungsinya relatif singkat.