2010-03-14 53 views

回答

5

這並不是那麼漂亮,但這應該可以在DrScheme中測試。

(define (gen-list x) 
    (if (= x 0) (list 0) (cons x (gen-list (- x 1))))) 
+1

難道不就是'(cons x ...)'而不是'(append(list x)...)'? – 2010-03-14 21:15:37

+0

@彌敦道 - 正確和修復 – zellio 2010-03-14 21:17:48

0

如果您正在使用PLT方案中,推導庫將讓你這樣做而整齊:

; natural -> (listof natural) 
(define (list-to-zero start-num) 
(for/list ([i (in-range start-num 0 -1)]) 
    i)) 

只是一個替代遞歸形式...

3

現在,它的一個作業問題,我認爲一個尾遞歸版本可能是一個替代方案。

(define (gen-list x) 
      (let lp ((n 0) (ret '())) 
       (if (> n x) 
       ret 
       (lp (1+ n) (cons n ret))))) 
相關問題