SICP演習問題2.27~2.32
;;2.27 (define (deep-reverse lis) (if (pair? lis) (append (deep-reverse (cdr lis)) (list (deep-reverse (car lis)))) lis))
(define (deep-reverse tree) (if (not (pair? tree)) tree (reverse (map deep-reverse tree))))
お,おされだ..
;;2.28 (define (fringe lis) (cond [(null? lis) '()] [(pair? (car lis)) (append (fringe (car lis)) (fringe (cdr lis)))] [else (append (list (car lis)) (fringe (cdr lis)))]))
一応できだんだけど,これもmapをつかってなんとかできないかぁ..
;;2.30 (define (square x) (* x x)) (define (square-tree tree) (cond [(null? tree) '()] [(not (pair? tree)) (square tree)] [else (cons (square-tree (car tree)) (square-tree (cdr tree)))])) (define (square-tree tree) (map (lambda (sub-tree) (if (pair? sub-tree) (square-tree sub-tree) (square sub-tree))) tree)) ;;2.31 (define (tree-map proc tree) (map (lambda (sub-tree) (if (pair? sub-tree) (tree-map proc sub-tree) (proc sub-tree))) tree))