プログラミング Gauche - 6 章

練習問題をやってみた。


;; リストの長さを計算する
(define (length lis)
(if (null? lis)
0
(+ (length (cdr lis)) 1)))
;; リストから条件に合うものを抽出してリストにする
(define (scan pred lis)
(cond [(null? lis) '()]
[(pred (car lis)) (append2 (list (car lis)) (scan pred (cdr lis)))]
[else (scan pred (cdr lis))]))
こんな感じでしょうか。scan はもう少し綺麗に書けるような気がするのだけれども。もともと再帰処理に苦手意識があるので、なかなか先に進みません。