2011-12-13 11 views
5

मैं DrRacket संस्करण 5.0.2, मैं 3 घंटे की तरह खर्च किया है पहले से ही while, dolist, और dotimes काम करने के लिए सही पुस्तकालयों की तलाश में है। मुझे पता है कि उनका उपयोग कैसे करें, लेकिन मुझे सही पुस्तकालय नहीं मिल रहे हैं। जब मैं dotimes टाइप करता हूं उदाहरण के लिए यह मुझे अज्ञात पहचानकर्ता बताता है।योजना (रैकेट) - लूप पुस्तकालय

पीएस: क्या आपको इन लूप को परिभाषित करने के लिए define-syntax का उपयोग करना होगा? मैंने (require srfi/42) की कोशिश की है लेकिन यह काम नहीं करता है। मैं #lang scheme का उपयोग कर रहा हूँ।

+1

'जबकि', 'डॉलीस्ट' और 'डॉटिम्स' आम लिस्प फॉर्म हैं। आप निश्चित रूप से योजना में उनके लिए मैक्रोज़ लिख सकते हैं, लेकिन शायद आप वास्तव में एक सामान्य लिस्प पर्यावरण चाहते हैं? –

+1

वैसे, '# लांग स्कीम' पिछली संगतता भाषा है और इसे बहिष्कृत किया गया है, इसलिए आप शायद '# लांग रैकेट' का उपयोग करना चाहते हैं। साथ ही, मैं [गाइड] (http://pre.racket-lang.org/docs/html/guide/index.html) को पढ़ने का सुझाव देता हूं (यह इस तरह के प्रश्नों के लिए बहुत अच्छा है)। –

उत्तर

9

आप इस्तेमाल कर सकते हैं रैकेट के built-in iteration forms बजाय:

(dolist (x some-list) body-forms ...) के बजाय

, आप (for ((x some-list)) body-forms ...)

(dotimes (i n) body-forms ...) के बजाय

लिख सकते हैं, आप (for ((i (in-range 0 n))) body-forms ...) या यहाँ तक कि बस (for ((i n)) body-forms ...) इस्तेमाल कर सकते हैं, जब तक कि n एक गैर नकारात्मक पूर्णांक है ।

सीएल-स्टाइल लूप को रैकेट-शैली वाले लोगों में बदलने के लिए आप सिंटैक्स-नियम मैक्रोज़ लिख सकते हैं, लेकिन शायद यह इसके लायक नहीं है। रैकेट का for -forms dotimes या dolist से अधिक लचीला हैं, क्योंकि आप आसानी से उन्हें कई अनुक्रमों में एक बार फिर से उपयोग करने के लिए उपयोग कर सकते हैं।

+0

धन्यवाद;) मैं कोशिश करूँगा –

+0

ध्यान दें कि प्रलेखन लिंक रैकेट के नवीनतम संस्करण के लिए है, जो इस टिप्पणी के समय 5.2 है। आपने बताया है कि आप 5.0.2 का उपयोग कर रहे हैं, इसलिए संस्करण अंतर से अवगत रहें। – dyoo

+0

मैंने केवल इतना ध्यान दिया कि पूर्णांक 'n' के लिए आप' (के लिए ((इन)) ...) 'के लिए समकक्ष के रूप में उपयोग कर सकते हैं (के लिए ((i (इन-रेंज 0 एन)) ...) '। साफ! –

0

संख्या वास्तव में एक अनुक्रम है।

> (sequence->list 5) 
'(0 1 2 3 4) 

(for ((i (in-range n))) body-forms ...) भी काम करता है। in-range तेज है।

0

अब रैकेट के लिए सामान्य लिस्प loop मैक्रो का कार्यान्वयन भी है। इसे इस तरह आयात करें:

(require (planet jphelps/loop)) 
संबंधित मुद्दे