2012-10-16 7 views
6

Scheme에서 연속적인 숫자 목록을 만드는 방법은 무엇입니까?Scheme에서 Python의 범위와 아날로그

1에서 10까지의 정수리스트를 만드는 파이썬에서는 range(1,11)이 될 것입니다. Scheme에 상응하는 것이 있습니까?

mzscheme --versionWelcome 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 (기본값 0 대신)에서 시작하는 10 개의 연속 정수를 제공합니다.

iota은 범위와 동일한 인수를 사용하지 않지만 오름차순 범위, 내림차순 범위, 하나의 바인딩 만 지정된 경우 0부터 시작하여 간격 지정 기능을 모두 복제합니다. 내장 아무것도 경우

+0

저는 전문가는 아니지만 python3의 범위는 범위 개체를 반환하며 생성자 프로토콜을 따라 다음 함수를 통해 느리게 평가합니다. 나는 내가 할 수있는 것을 본다. (지연 (iota 5 1)) 나중에 나서는 그것을 평가할 수있다. 내 질문은 : 일단 평가, 모든 목록을 한 번에 메모리에 넣어? 파이썬의 범위와 정확히 같은 효과를 얻을 수 있습니까? 한 번에 한 가지 가치를 평가하는 것입니다. –

3

, 그것을 작성하는 사소한 자신의 :

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

온라인 방식 평가 : 여기

+0

'(먼저 (범위 ((첫 번째 마지막) + -) 처음 1) 마지막))))' – itsbruce

+0

@itsbruce 절대로 종료되지 않습니다. – nibot

+0

예. 시도 해봐. 첫 번째 숫자가 더 낮은 것보다 높으면 내림차순 범위를 제공하고, 첫 번째 숫자가 낮은 경우 오름차순 범위를 내립니다. 아, 당신은 조건을 (if (= first last)) – itsbruce

5

http://eval.ironscheme.net/?id=71는 첫 번째 숫자는 낮은 또는 경우 상승 범위를 않는 버전입니다

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

그리고 여기에 1 개 또는 2 개의 인수를 할 수있는 개선 된 버전입니다; 범위를 하강하면 높은 경우 오직 하나만 주어지면 0에서 주어진 숫자까지의 범위가됩니다 :

(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

저는 Ankur의 대답을 대답으로 올리고 있습니다. 라켓에서는 "의 범위"가 있습니다

#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

나는 이것이 받아 들인 대답보다 낫다고 생각한다. '(require ...) '문도 필요 없습니다. –