関数型言語の勉強にSICPを読もう - (12) 2章 - データによる抽象の構築(63ページ)

問題 2.28

(define (fringe tree)
  (define (pair-to-list pair)
    (list (car pair) (car (cdr pair))))
  (if (null? tree)
      '()
      (if (pair? (car tree))
          (append (pair-to-list (car tree)) (fringe (cdr tree)))
          (append (car tree) (fringe (cdr tree))))))

とか

(define (fringe t)
  (if (null? t)
      '()
      (append (car t) (fringe (cdr t)))))

ものの見事にはまってしまいました。
解答を見たらlist 関数の使い方をきちんと理解できていないことに気づかされた。
あとは if と condの使い分けも微妙。
正解はスマートだなぁ。

(define (fringe tree)
  (cond ((null? tree) tree)
        ((not (pair? tree)) (list tree))
        (else (append (fringe (car tree))
                      (fringe (cdr tree))))))


※「SICPを読もう」の目次はこちら


計算機プログラムの構造と解釈
Gerald Jay Sussman Julie Sussman Harold Abelson 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404