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.
@
letdan 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 ... 0sebagai gantifirstUntuk mendapatkan elemen pertama koleksi, menggunakan (nth ... 0)lebih dari firstsatu 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 partitionatau frequenciesbeberapa kali, itu bisa bermanfaat untuk mengikatnya ke simbol byte tunggal di letmakro. Kemudian lagi mungkin tidak layak jika Anda tidak membutuhkan yang letsebaliknya, dan nama fungsinya relatif singkat.