Lời khuyên của bạn để chơi golf mã bằng Clojure là gì?
Mục đích của câu hỏi này là thu thập một danh sách các kỹ thuật dành riêng cho Clojure và có thể được sử dụng trong các bài toán đánh gôn nói chung.
Lời khuyên của bạn để chơi golf mã bằng Clojure là gì?
Mục đích của câu hỏi này là thu thập một danh sách các kỹ thuật dành riêng cho Clojure và có thể được sử dụng trong các bài toán đánh gôn nói chung.
Câu trả lời:
Sử dụng cú pháp đọc cho lambdas.
Vì vậy, sử dụng
#(+ % %2 %3)
thay vì
(fn [x y z] (+ x y z))
Bạn cũng có thể loại bỏ khoảng trắng một số thời gian:
#(if (< % 0) (- %) %)
#(if(< % 0)(- %)%)
#(+ % %2 %3)
là tương đương với +
.
Giữa một chuỗi và bất cứ điều gì khác:
(println(+"Hello, World!"1))
Giữa dấu ngoặc và bất cứ thứ gì khác:
(for[x(range 5)](* x x))
Giữa một số và mọi thứ khác với nội dung hoặc tên biến:
Allowed:
(+ 1"Example")
(map{1"-1"2"-2"}[1 2 3])
Not allowed:
(+1 2)
Giữa @
(sự bổ nhiệm cho các nguyên tử) và dấu ngoặc.
@
let
và thoát khỏi một số không gian.
#(+ 1(first%))
=#(+ 1 (first %))
Chuỗi có thể được coi là một chuỗi ký tự
ví dụ: để sắp xếp các ký tự trong một chuỗi theo thứ tự abc:
(sort "hello")
=> (\e \h \l \l \o)
nth ... 0
thay vìfirst
Để có được phần tử đầu tiên của bộ sưu tập, sử dụng (nth ... 0)
trên sẽ first
tiết kiệm một byte:
(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)
second
(2 byte)
([2 3 4]1)
trả về phần tử ở chỉ mục 1. Điều này sẽ có ích nếu ví dụ định dạng đầu vào là linh hoạt.
Ví dụ, nếu bạn cần sử dụng partition
hoặc frequencies
nhiều lần, có thể có ích khi liên kết chúng với một ký hiệu một byte trong một let
macro. Sau đó, một lần nữa nó có thể không có giá trị nếu bạn không cần let
khác, và tên hàm tương đối ngắn.