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.
@
letvà 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 ... 0thay 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ẽ firsttiế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 partitionhoặc frequenciesnhiề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 letmacro. Sau đó, một lần nữa nó có thể không có giá trị nếu bạn không cần letkhác, và tên hàm tương đối ngắn.