初学者方案:返回自己的程序



这是我正在读的书中的一个例子:

1    (define (length items)
2     (define (length-iter a count)
3       (if (null? a)
4           count
5           (length-iter (cdr a)(+ 1 count))))
6      (length-iter items 0))

我不明白的是length-iter怎么知道计数?第一次这个过程是用list调用的,它反过来会用两个争论来定义另一个过程,我得到了这么多。但是它怎么知道alist items呢?它还没有到达第 6 行,items作为参数传递给length-iter a。不知何故,尽管它已经知道这一点并能够进行计算。任何帮助澄清这一点,不胜感激!

length函数中有两个部分:

  1. 内部函数的定义 length-iter ;
  2. 内部函数的调用length-iter .

在调用中,即第 6 行,您将原始items列表作为参数传递给内部函数。这是调用内部函数的地方。以前,您只是定义函数,而不是调用它:

(length-iter items 0)

因此,items将绑定到a0绑定到count。您可以将内部函数视为一个单独的函数:

(define (length-iter a count)
  (if (null? a)
      count
      (length-iter (cdr a)(+ 1 count))))

然后,将您的length函数想象成它只是将所有工作委托给length-iter函数:

(define (length items)
  (length-iter items 0))

这就是你的函数中正在做的事情。不同之处在于,length-iter函数只有length知道。

最新更新