#scheme
#схема
Вопрос:
У меня есть эта программа:
(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)
with (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)
. И так далее в рекурсивных вызовах.