我有这个程序:
(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))
。列表什么时候减少?
谢谢。
答案 0 :(得分: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)
。等等在递归调用中。