昔作ったdeep-reverseが間違ってた。

昔書いたところを読み直していたら、間違いに気づいた。

  • deep-reverse1
    • 最初に作ったもの(動かないときがある)
  • deep-reverse2
    • たぶん動く
  • deep-reverse3
    • mapを使ったもの
(define (deep-reverse1 tree)
  (if (pair? tree)
      (cons (deep-reverse1 (cadr tree))
            (cons (deep-reverse1 (car tree)) '()))))

(define (deep-reverse2 tree)
  (if (not (pair? tree))
      tree
      (if (pair? (cdr tree))
          (append (deep-reverse2 (cdr tree))
                (list (deep-reverse2 (car tree))))
          (append (cdr tree) (list (deep-reverse2 (car tree)))))))

(define (deep-reverse3 tree)
  (if (pair? tree)
      (reverse (map deep-reverse3 tree))
      tree))

deep-reverse1が動かないとき

gosh> x
(1 (2 (3)) (4 5) 6)

gosh> (deep-reverse1 x)
*** ERROR: pair required, but got ()
Stack Trace:
_______________________________________

他のものだと動く

gosh> (deep-reverse2 x)
(6 (5 4) ((3) 2) 1)
gosh> (deep-reverse3 x)
(6 (5 4) ((3) 2) 1)

まだ正解だと思っていたもの中にも間違っているものがあるかもしれません><