निम्नलिखित टिप्स रैकेट के लिए हैं :
डिफ़ॉल्ट तर्क
विशेष रूप से लंबे फ़ंक्शन नामों के लिए उपनाम बनाने के लिए विशेष रूप से उपयोगी है जो अक्सर उपयोग किए जाते हैं।
मान लें कि गोल्फ आपको एक फ़ंक्शन लिखने की अनुमति देता है जो तर्क का उपभोग करता है, और मान लें कि आपको reverse
बहुत उपयोग करने की आवश्यकता है । आप कुछ इस तरह से शुरू करेंगे:
(λ(x) ... reverse ... reverse ... reverse ...
आप इसके बजाय एक छोटे नाम के साथ एक अतिरिक्त तर्क में ले सकते हैं reverse
, और इसके डिफ़ॉल्ट मान को reverse
निम्न पर सेट कर सकते हैं :
(λ(x[r reverse]) ... r ... r ... r ...
इसके अलावा, यह उपयोगी है यदि आपके पास एक सहायक फ़ंक्शन है जिसका उपयोग आप कुछ समान तर्कों के साथ कई स्थानों पर करते हैं। आवश्यकतानुसार फ़ंक्शन के तर्कों को पुन: व्यवस्थित करने के लिए याद रखें, इसलिए आप यथासंभव कई डिफ़ॉल्ट तर्कों का उपयोग कर सकते हैं, और कई कॉल से तर्कों को हटा सकते हैं।
match
यह एक छोटी सी पोस्ट में संक्षेप में रखने के लिए थोड़ा कठिन है, इसलिए इस एक के लिए रैकेट डॉक्स पर पढ़ें । संक्षेप में, 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)
एक स्थानान्तरण लेता है matrix
, जहां matrix
कुछ आयताकार सूची की सूची है, जैसे '((1 2 3) (a b c))
।
मुझे पता है अगर यह उपयोगी साबित होता है।