2012-10-16 15 views
6

योजना में पाइथन की सीमा का एनालॉग योजना में लगातार संख्याओं की सूची कैसे बनाएं?योजना

पायथन में 1 से 10 के पूर्णांक की सूची बनाने के लिए range(1,11) होगा। क्या योजना के बराबर है?

mzscheme --version देता Welcome to Racket v5.2.1.

संपादित करें: प्रति https://stackoverflow.com/a/7144310/596361 रेंज कार्यक्षमता लागू करने के लिए, इस कोड की जरूरत है:

#lang racket 
(require srfi/1) 
(iota 5 1) 

उत्तर

8

के लिए देखो जरा (के रूप में SRFI -1 में परिभाषित)।

उदाहरण: (iota 10 1) 1 से शुरू होने वाले लगातार 10 पूर्णांक देता है (0 के डिफ़ॉल्ट के बजाय)।

जरा रेंज के रूप में ही तर्क नहीं ले करता है, लेकिन यह सभी कार्यक्षमता डुप्लिकेट - आरोही पर्वतमाला, पर्वतमाला उतरते, 0 से शुरू करता है, तो केवल एक ही बाध्य दिया जाता है अंतराल निर्दिष्ट करने की क्षमता।

+0

मैं कोई विशेषज्ञ हूँ, लेकिन सीमा python3 एक सीमा ऑब्जेक्ट में और यह lazily अगले समारोह के माध्यम से मूल्यांकन करता है, जनरेटर प्रोटोकॉल के बाद। मैं देखता हूं कि मैं कर सकता हूं (देरी (iota 5 1)) और बाद में बल इसका मूल्यांकन कर सकता है। मेरा सवाल है: एक बार मूल्यांकन किया गया, सभी सूची स्मृति में एक बार में रखी जाती है? क्या पाइथन की सीमा के रूप में बिल्कुल वही प्रभाव प्राप्त किया जा सकता है? मेरा मतलब है, एक समय में एक मूल्य का मूल्यांकन करना। –

3

में निर्मित कुछ भी नहीं होती है, तो यह लिखने के लिए तुच्छ है अपनी खुद की:

(define (range first last) 
    (if (>= first last) 
     '() 
     (cons first (range (+ first 1) last)))) 

ऑनलाइन योजना मूल्यांकनकर्ता: http://eval.ironscheme.net/?id=71

+0

'(विपक्ष पहले (रेंज ((यदि (<पहली बार) + -) पहले 1) अंतिम)))) – itsbruce

+0

@itsbruce जो कभी समाप्त नहीं होता है। – nibot

+0

हां यह करता है। कोशिश करो। यदि पहली संख्या कम से कम है, या पहली बार कम होने पर आरोही सीमा है तो यह अवरोही सीमा प्रदान करता है। आह, आपको अपनी हालत बदलनी होगी (अगर (= पहले आखिरी)) – itsbruce

5

यहाँ एक संस्करण है, तो पहले नंबर कम या एक है जो एक आरोही रेंज करता है अवरोही रेंज यदि यह अधिक है:

(define range 
    (lambda (n m) 
    (cond 
     ((= n m) (list n)) 
     (else (cons n (range ((if (< n m) + -) n 1) m)))))) 

और यहां एक बेहतर संस्करण है जो 1 या 2 तर्क ले सकता है; मैं सिर्फ ऊपर उठाने रहा हूँ @ एक जवाब के लिए अंकुर की टिप्पणी

(define range 
    (lambda (n . m) 
    (let 
     ((n (if (null? m) 0 n)) (m (if (null? m) n (car m)))) 
     (cond 
    ((= n m) (list n)) 
    (else (cons n (range ((if (< n m) + -) n 1) m))))))) 
1

: यदि केवल एक ही दिया जाता है, यह 0 से दी गई संख्या के लिए एक सीमा है। रैकेट में, आप "में दूरी" है:

#lang racket 

(in-range 7) ;; produces #<stream> 

;; used in a loop: 
(for/list ([i (in-range 7)]) 
    i) 
;; produces (list 0 1 2 3 4 5 6) 


;; and, for the lazy among us: 

(for/list ([i 7]) 
    i) 

;; produces the same 

यह भी एक कम सीमा, एक वेतन वृद्धि (नकारात्मक सहित) स्वीकार कर सकते हैं, आदि

1

है निर्मित एक रैकेट में range समारोह है कि पाइथन की तरह व्यवहार करता है।

> (range 10) 
'(0 1 2 3 4 5 6 7 8 9) 
+0

मुझे लगता है कि यह स्वीकृत उत्तर से बेहतर है। किसी भी (आवश्यकता ...) 'कथन की आवश्यकता नहीं है। –