乐正

Actions speak louder than words.

Sicp-ex3-16

问题

Ben Bitdiddle 决定写一个过程,统计任何一个表结构中的序对个数。“这太简单了,”他说,“任何表结构里的序对个数就是其car部分的统计值加上cdr部分的统计值再加上1,以计入当前这个序对”。所以 Ben 就写了下面过程:

1
2
3
4
5
6
(define (count-pairs x)
  (if (not (pair? x))
      0
      (+ (count-pairs (car x))
         (count-pairs (cdr x))
         (1))))

请说明这一过程并不正确。请画出几个表示表结构的盒子指针图,它们都正好由三个序对构成,而 Ben 的过程对它们分别返回3, 4, 7,或者根本就不返回。

解答

长度为3的序对:

练习3.16

长度为4的序对:

练习3.16

长度为7的序对:

练习3.16

不会返回的序对:

练习3.16

draft

« sicp-ex3-15 sicp-ex3-17 »

Comments