เคล็ดลับต่อไปนี้สำหรับแร็กเก็ต :
อาร์กิวเมนต์เริ่มต้น
มีประโยชน์อย่างยิ่งสำหรับการสร้างชื่อแทนสำหรับชื่อฟังก์ชันที่ใช้บ่อย
สมมติว่า Golf ช่วยให้คุณสามารถเขียนฟังก์ชั่นที่ใช้การโต้แย้งและสมมติว่าคุณต้องใช้reverse
มาก คุณจะเริ่มต้นด้วยสิ่งที่ชอบ:
(λ(x) ... reverse ... reverse ... reverse ...
คุณสามารถรับอาร์กิวเมนต์เพิ่มเติมแทนโดยใช้ชื่อที่สั้นกว่าreverse
และตั้งค่าเริ่มต้นเป็นreverse
:
(λ(x[r reverse]) ... r ... r ... r ...
นอกจากนี้ยังมีประโยชน์ถ้าคุณมีฟังก์ชั่นตัวช่วยที่คุณใช้ในหลาย ๆ สถานที่ที่มีอาร์กิวเมนต์เดียวกัน อย่าลืมจัดลำดับอาร์กิวเมนต์ใหม่ให้กับฟังก์ชันตามต้องการเพื่อให้คุณสามารถใช้อาร์กิวเมนต์เริ่มต้นมากที่สุดเท่าที่จะเป็นไปได้และลบข้อโต้แย้งออกจากหลายไซต์
match
อันนี้ค่อนข้างยากที่จะสรุปในโพสต์เล็ก ๆ ดังนั้นให้อ่านบนRacket Docsสำหรับเอกสารนี้ สรุปmatch
ช่วยให้คุณสามารถแยกองค์ประกอบและลำดับขององค์ประกอบในลำดับที่แน่นอนจากรายการและไวยากรณ์ quasiquote ช่วยให้คุณสามารถเย็บรายชื่อที่ถูกตัดกลับมารวมกัน:
(match (range 10)
[`(,xs ... 3 ,ys ... 6 ,zs ...)
`(,@(map f xs) 3 ,@(map f ys) 6 ,@(map f sz))]
...
นอกจากนี้ยังช่วยให้คุณสามารถทำงานกับนิพจน์ทั่วไปและทำการคำนวณเพิ่มเติมในกลุ่มผลลัพธ์หลังจากนั้น
ตั้งชื่อ let
ดูไวยากรณ์ที่มีชื่อที่นี่let proc-id ...
ที่นี่
สิ่งนี้ช่วยให้คุณสามารถเขียนฟังก์ชั่นวนซ้ำที่เรียกได้ทันทีโดยไม่ต้อง define
เรียกใช้ฟังก์ชั่นจริงหรือหลังจากเรียกใช้งานจริง
สิ่งที่ต้องการ:
(define (fib i)
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
(fib 10)
สามารถย่อให้เหลือ:
(let fib {[i 10]}
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
สุดท้ายนี้คือโง่ แต่ผมยังไม่ได้รับสามารถที่จะใช้เคล็ดลับเล็ก ๆ น้อย ๆ นี้ได้ทุกที่เพื่อให้ห่างไกล:
(apply map list matrix)
ใช้เวลา transpose ของmatrix
ที่บางรายการสี่เหลี่ยมของรายการเช่นmatrix
แจ้งให้เราทราบหากนี่พิสูจน์ได้ว่ามีประโยชน์'((1 2 3) (a b c))