2011-04-21 2 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) 그래서 첫 번째 호출이 기능에. 재귀 호출에서도 마찬가지입니다.