คุณมีเคล็ดลับอะไรในการตีกอล์ฟโดยใช้ Clojure
จุดประสงค์ของคำถามนี้คือการรวบรวมรายชื่อของเทคนิคที่เฉพาะเจาะจงกับ Clojure และสามารถนำมาใช้ในปัญหาการเล่นกอล์ฟทั่วไป
คุณมีเคล็ดลับอะไรในการตีกอล์ฟโดยใช้ Clojure
จุดประสงค์ของคำถามนี้คือการรวบรวมรายชื่อของเทคนิคที่เฉพาะเจาะจงกับ Clojure และสามารถนำมาใช้ในปัญหาการเล่นกอล์ฟทั่วไป
คำตอบ:
ใช้ไวยากรณ์ตัวอ่านสำหรับ lambdas
ดังนั้นใช้
#(+ % %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)
ระหว่าง@
(dereference สำหรับอะตอม) และวงเล็บ
@
let
และกำจัดช่องว่าง
#(+ 1(first%))
=#(+ 1 (first %))
สตริงสามารถถือว่าเป็นลำดับของตัวอักษร
เช่นเพื่อจัดเรียงอักขระในสตริงตามตัวอักษร:
(sort "hello")
=> (\e \h \l \l \o)
nth ... 0
แทนfirst
ในการรับองค์ประกอบแรกของคอลเล็กชันการใช้(nth ... 0)
over first
save byte:
(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)
second
(2 ไบต์)
([2 3 4]1)
ส่งคืนองค์ประกอบที่ดัชนี 1 ซึ่งควรเป็นประโยชน์หากตัวอย่างเช่นรูปแบบอินพุตมีความยืดหยุ่น
ยกตัวอย่างเช่นเป็นหนึ่งไบต์สั้นกว่า#(apply + %)
#(reduce + %)
ตัวอย่างเช่น: แทน#(for[a[(sort %)]...)
#(let[a(sort %)](for ...))
เพราะมันมี:let
โครงสร้าง แต่มันละเอียดเกินไปสำหรับการตีกอล์ฟ
+
และ-
แทนinc
และdec
วิธีนี้จะช่วยประหยัด 1 ไบต์หากคุณใช้inc
/ dec
ในการแสดงออกด้วย parens:
(inc(first[1 3 5]))
(+(first[1 3 5])1)
if
s เมื่อทำการทดสอบเพื่อความเท่าเทียมกัน;; if n=3 then A else B
(if (= 3 n) A B) ; (if(=3n)AB)
({3 A} n B) ; ({3A}nB) -> -3 chars
;; if n=2 or n=3 then A else B
(if (#{2 3} n) A B) ; (if(#{23}n)AB)
({2 A 3 A} n B) ; ({2A3A}nB) -> -4 chars
ตัวอย่างเช่นหากคุณต้องการใช้partition
หรือfrequencies
หลายครั้งอาจเป็นประโยชน์ในการผูกเข้ากับสัญลักษณ์ไบต์เดียวในlet
แมโคร จากนั้นอีกครั้งมันอาจไม่คุ้มค่าถ้าคุณไม่ต้องการlet
อย่างอื่นและชื่อฟังก์ชั่นนั้นค่อนข้างสั้น
ยกตัวอย่างเช่น#(for[i %](Math/abs i))
สั้นกว่าmap
ปกติมาก