2016-06-20 3 views
2

빈 목록에 값을 재귀 적으로 추가하는 체계에서 함수를 만들려고합니다.Scheme - 목록에 재귀 적으로 값 추가

나는 빈리스트 정의 :

(define empty '()) 

을 그리고 목록에 값을 추가해야하는 기능 정의 :

(define (recapp empt x) 
    (if (= 0 x) 
     empt 
     (begin 
     (append empt x) 
     (recapp empt (- x 1))))) 

나는 방식에 입력 (recapp 빈 5) I를 (1 2 3 4 5)를 얻고 싶어도 빈 목록을 얻으십시오. 문제가 무엇입니까?

도와 주셔서 감사합니다.

답변

1

문제는 (추가 empt x)는 empt의 값을 수정하지 않는다는 것입니다. 따라서 empt (값 '())을 recappX (원래 인수 값) 번까지 전달합니다.

(define (recapp empt x) 
    (if (= 0 x) 
     empt 
     (recapp (cons x empt) (- x 1)))) 

당신이 원하는 것에 더 가깝습니다. 비슷한 기능을 가진 primative iota도 있습니다.

+2

'iota'는 실제로는 프리미티브가 아닙니다. 그것은 SRFI 1에 의해 제공됩니다. 예를 들어, Racket은 대신'range'를 제공합니다 ('iota'에 다른 인수 순서로). –

+1

감사합니다 !! 불행히도 저는 아직 답을 상향 투표 할 수 없습니다 : / – Leero11

관련 문제