プログラミングGaucheの練習問題(filter,length)
プログラミングGaucheの6.5の練習問題(P54)をしてみる。
Filter手続き
先頭の要素が条件を満たせば、その要素と再帰したfilter結果をくっつけたものを返す。満たせなければ、単にfilter結果を返す。
(define (filter pred lis) (if (null? lis) (list ) (if (pred (car lis) ) (cons (car lis) (filter pred (cdr lis) )) (filter pred (cdr lis)) )))
length手続き
再帰毎の結果に1つづカウントしていくかたち。
(define (length lis) (if (null? lis) ( 0) (+ (length(cdr lis)) 1) ) )
末尾再帰でないので、あまりよくないですね。と思っていたら本の2ページ後に末尾再帰れの実装も載っていました。
で、使った例。
(print (filter (lambda (x) (> x 4 ) ) '(1 2 3 4 5 6 8) )) (print (length '(1 2 3 4)) )
- >
(5 6 8) 4
ま、とりあえず意図どおり。