つかれたー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"