練習問題 P.69 numbers-only-for-tree
(numbers-only for-each)や(numbers-only map)で入れ子のリストを処理できるか?
→ できない
理由: 例えば入れ子のリストの '(1 2 3 (4 5) 6) の
4番目の要素 '(4 5) は数値ではなく、リストであるから
walker が満たすべき条件: 入れ子のリストの中も処理すること
とりあえず入れ子のリストにも対応させた filter-for-tree を定義した。
(define (filter-for-tree pred lis) (cond ((null? lis) lis) ((pair? (car lis)) (cons (filter-for-tree pred (car lis)) (filter-for-tree pred (cdr lis)))) ((pred (car lis)) (cons (car lis) (filter-for-tree pred (cdr lis)))) (else (filter-for-tree pred (cdr lis))))) (define (numbers-only-for-tree walker) (lambda (proc lis) (walker proc (filter-for-tree number? lis))))