つかれたーSICP

苦労した

(define (reverse ls)
  (reverse-itr ls '())
 )
(define (reverse-itr ls ans)
  (if (null? ls)
      ans
      (reverse-itr (cdr ls) (cons (car ls) ans))
      )
  )
(define (deep-reverse ls)
  (deep-reverse-itr ls '())
  )
(define (deep-reverse-itr ls ans)
  (if (null? ls)
      ans
      (deep-reverse-itr (cdr ls) (cons
                                  (if (pair? (car ls)) ;;ここでifするのが思いつかず。。
                                      (deep-reverse-itr (car ls) '())
                                      (car ls) )
                                  ans)))
  )
(trace reverse-itr)
(trace deep-reverse-itr)
(reverse (list "ha1" "ha2" "ha3" "ha4" "ha5"))
(reverse (list(list "e1ha1" "e1ha2") (list "e2ha1" "e2ha2" "e2ha3")))
(deep-reverse (list "ha1" "ha2" "ha3" "ha4" "ha5"))
(deep-reverse (list(list "e1ha1" "e1ha2") (list "e2ha1" "e2ha2" "e2ha3")))
(deep-reverse (list(list "e1ha1" "e1ha2") (list "e2ha1" (list "e2-e1ha1" "e2-e1ha2"))))
;;見にくいだろうが

以下出力

> ("ha5" "ha4" "ha3" "ha2" "ha1")
> *1
>

(deep-reverse-itr ("ha1" "ha2" "ha3" "ha4" "ha5") ())
(deep-reverse-itr ("ha2" "ha3" "ha4" "ha5") ("ha1"))
(deep-reverse-itr ("ha3" "ha4" "ha5") ("ha2" "ha1"))
(deep-reverse-itr ("ha4" "ha5") ("ha3" "ha2" "ha1"))
(deep-reverse-itr ("ha5") ("ha4" "ha3" "ha2" "ha1"))
(deep-reverse-itr () ("ha5" "ha4" "ha3" "ha2" "ha1"))
("ha5" "ha4" "ha3" "ha2" "ha1")

("ha5" "ha4" "ha3" "ha2" "ha1")
>

(deep-reverse-itr *2 ())
(deep-reverse-itr ("e1ha1" "e1ha2") ())
(deep-reverse-itr ("e1ha2") ("e1ha1"))
(deep-reverse-itr () ("e1ha2" "e1ha1"))
("e1ha2" "e1ha1")
(deep-reverse-itr *3 (("e1ha2" "e1ha1")))
(deep-reverse-itr ("e2ha1" "e2ha2" "e2ha3") ())
(deep-reverse-itr ("e2ha2" "e2ha3") ("e2ha1"))
(deep-reverse-itr ("e2ha3") ("e2ha2" "e2ha1"))
(deep-reverse-itr () ("e2ha3" "e2ha2" "e2ha1"))
("e2ha3" "e2ha2" "e2ha1")
(deep-reverse-itr () (("e2ha3" "e2ha2" "e2ha1") ("e1ha2" "e1ha1")))
*4

*5
>

(deep-reverse-itr *6
(deep-reverse-itr ("e1ha1" "e1ha2") ())
(deep-reverse-itr ("e1ha2") ("e1ha1"))
(deep-reverse-itr () ("e1ha2" "e1ha1"))
("e1ha2" "e1ha1")
(deep-reverse-itr (("e2ha1" ("e2-e1ha1" "e2-e1ha2"))) (("e1ha2" "e1ha1")))
(deep-reverse-itr ("e2ha1" ("e2-e1ha1" "e2-e1ha2")) ())
(deep-reverse-itr *7 ("e2ha1"))
(deep-reverse-itr ("e2-e1ha1" "e2-e1ha2") ())
(deep-reverse-itr ("e2-e1ha2") ("e2-e1ha1"))
(deep-reverse-itr () ("e2-e1ha2" "e2-e1ha1"))
("e2-e1ha2" "e2-e1ha1")
(deep-reverse-itr () *8
(("e2-e1ha2" "e2-e1ha1") "e2ha1")
(deep-reverse-itr () ((("e2-e1ha2" "e2-e1ha1") "e2ha1") ("e1ha2" "e1ha1")))
((("e2-e1ha2" "e2-e1ha1") "e2ha1") ("e1ha2" "e1ha1"))

((("e2-e1ha2" "e2-e1ha1") "e2ha1") ("e1ha2" "e1ha1"))

*1:"e2ha1" "e2ha2" "e2ha3") ("e1ha1" "e1ha2"

*2:"e1ha1" "e1ha2") ("e2ha1" "e2ha2" "e2ha3"

*3:"e2ha1" "e2ha2" "e2ha3"

*4:"e2ha3" "e2ha2" "e2ha1") ("e1ha2" "e1ha1"

*5:"e2ha3" "e2ha2" "e2ha1") ("e1ha2" "e1ha1"

*6:"e1ha1" "e1ha2") ("e2ha1" ("e2-e1ha1" "e2-e1ha2"))) (

*7:"e2-e1ha1" "e2-e1ha2"

*8:"e2-e1ha2" "e2-e1ha1") "e2ha1"