首页 > 解决方案 > 为什么(不是?(对?x)[...])比((对?x)[...])有益?

问题描述

贯穿 SICP 的第 2 章,尤其是第 2.2 节。及其在 Scheme wiki 上的相应解决方案,我在处理树结构时经常看到相同的模式:

(cond ((null? tree) nil) 
      ((not (pair? tree)) (foo tree)) 
      (else (cons (bar (car tree)) 
                  (bar (cdr tree)))))

这些结构的第二行经常让我感到困惑。在任何其他语言中,我希望看到最后两个分支交换如下:

(cond ((null? tree) nil)  
      ((pair? tree) (cons (bar (car tree)) 
                          (bar (cdr tree))))
      (else (foo tree))) 

那么为什么我在 Scheme 中没有看到呢?与(not? (pair? x) [...])交换分支和删除not?.

标签: schemelispsicp

解决方案


案例通常以最小或最特殊的情况开始,以最大或最一般的情况结束。

有一棵树,那将是

  1. 空的
  2. 叶子
  3. 所有其他树

推荐阅读