scheme - 列表的递归函数

时间:2011-04-21 15:26:17

标签: 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)致电(list 1 (list 2 (list 3 4) 5) (list 6 7))。列表什么时候减少?

谢谢。

1 个答案:

答案 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)。等等在递归调用中。