2011-04-21 70 views
0

的遞歸函數我有這樣的程序:方案 - 列出

(define scale-tree 
    (lambda (tree factor) 
    (map (lambda (sub-tree) 
      (if (list? sub-tree) 
       (scale-tree sub-tree factor) 
       (* sub-tree factor))) 
     tree))) 

(scale-tree (list 1 (list 2 (list 3 4) 5) (list 6 7)) 
10) 

請問這個代碼工作的?首先,我們把它作爲參數(list 1 (list 2 (list 3 4) 5) (list 6 7))的整個列表,並在第一次調用中,(lambda (sub-tree)得到(list 1 (list 2 (list 3 4) 5) (list 6 7))作爲參數。爲此,我們再次撥打(scale-tree sub-tree factor)(list 1 (list 2 (list 3 4) 5) (list 6 7))。列表何時減少?

謝謝。

回答

1

請記住map的作用 - 它將一個函數應用於列表的每個元素。因此,在第一次調用,這個功能:

(lambda (sub-tree) 
      (if (list? sub-tree) 
       (scale-tree sub-tree factor) 
       (* sub-tree factor))) 

被應用到列表中的元素:1(list 2 (list 3 4) 5)(list 6 7)。在遞歸調用中依此類推。