2014-11-03 36 views
0

所以在我的方案功能,下面提供,我需要產生一個結構列表。到目前爲止,我做了2個輔助函數:一個調用從1到x的數字列表。另一個調用與x對應的結構。我的方案功能:如何使其遞歸

例如:

(helper1 10) -> (list 1 2 3 4 5 6 7 8 9 10) 

(helper2 1) -> (make-person 0 1) 

(helper2 2) -> (make-person 1 2) 

(helper2 3) -> (make-person 2 3) etc... 

我怎樣才能讓我的主函數調用這個輔助函數的列表,其中每個元素替換其相應的結構。

注:我的主要功能必須是遞歸的,它必須產生一個結構列表。

到目前爲止,我的主要功能我:

(define (main-function x) 
(cond 
[(zero? x) empty] 
    [else 
    ...])) 

此外,我在初學學員名單縮寫寫作。

回答

0

你會想要構造一個全新的列表,而不是用結構替換每個元素。這是最終結果的外觀,但不是功能如何工作。

基本上,如果您的main-function需要一個數字,那麼您將需要創建一個實際執行遞歸的輔助函數,在那裏您將傳入調用(helper1 x)的結果。

然後,在你的遞歸中,你只是用相應的結構重組列表。

(define (main-function x) 
    (main-function-helper (helper1 x))) 

(define (main-function-helper l) 
    (cond 
    [(empty? l) l] 
    [else (cons (helper2 (first l)) 
       (main-function-helper (rest l)))])) 

,可能更有意義,另一種選擇是永遠不會創建中間列表:

(define (main-function x) 
    (main-function-helper 1 x)) 

(define (main-function-helper counter max) 
    (cond 
    [(= counter max) (cons (helper2 counter) empty)] 
    [else (cons (helper2 counter) 
       (main-function-helper (add1 counter) max))]))