схема - рекурсивная функция списков - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть эта программа:

(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 Ответ

1 голос
/ 21 апреля 2011

Помните, что делает 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).И так далее в рекурсивных вызовах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...