2015-11-08 22 views
0

下面是一個數字列表,當調用takeD時,它將生成一個與前面列表不同的列表。例如,如果你說(取D 3 L1),你會得到一個清單(1 2 3)。 intlistNew從給定數字開始的不同列表中創建一個列表。例如(takeD 3(delay(intlistNew 3 100)))將返回(3 4 5)。我試圖找出一種方法來改變intListNew,我不需要輸入100作爲參數只是3.我可以使用你的幫助。謝謝。帶延遲的方案列表

(define L1 (list 1 2 3 4 5 6 7 8 9)) 

(define (takeD n L) 
(if (= n 0) '() 
    (cons (car (force L)) (takeD (- n 1) (cdr (force L)))))) 

(define (intlistNew m n) 
(if (> m n) '() (cons m (delay (intlistNew (+ 1 m) n))))) 

(takeD 3 (delay (intlistNew 3 100))) 

回答

1

假設「我不需要100作爲參數僅有3輸入」的意思是「我想要那個intListNew可以用無限數量的元素生成一個列表」,那麼你只需從刪除參數的功能,以及遞歸終止測試:

(define (intlistNew m) 
    (cons m (delay (intlistNew (+ 1 m))))) 

(takeD 3 (delay (intlistNew 3))) 

你可以做到這一點,因爲延遲執行,避免了功能的無限執行由於遞歸調用。