2016-06-20 29 views
2

我試圖在計劃中遞歸地向空列表添加值。計劃 - 遞歸地向列表添加值

我已經定義了一個空列表:

(define empty '()) 

而且我已經確定了應當值添加到列表中的功能:

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

當我進入到方案(recapp空5)我即使我想獲得一個空列表(1 2 3 4 5)。問題是什麼?

感謝您的幫助。

回答

1

問題是(append empt x)不會修改empt的值。因此,您只是通過empt(值'())到recappX(原始參數值)次。

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

更接近你想要的。另請注意,基本型iota具有類似的功能。

+2

'iota'實際上不是原始的。它由SRFI提供。例如,Racket提供'range'來代替(用不同的參數命令給'iota')。 –

+1

謝謝!不幸的是我還不能向上投票你的答案:/ – Leero11