--- title: 『プログラミングGauche』サポートページ author: kazu634 date: 2008-09-01 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4251;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - gauche - Lisp ---

プログラミングGauche』で高階手続きがわかった後、68ページの練習問題をやる前に、投げ出していたfilterの定義を考えていた。昨日からがんばっていたけれど、ちょっと無理っぽかった。。。

調べてみると、「サポートページ」で模範解答があることがわかる。やった。ちょっとすばらしすぎて自分には思いつかないかもしれない > filterの手続き。先は長い。。。

;; リストの中から、条件を満たす要素だけを抜き出したリストを返すfilter
;; を定義してみる
(define (filter pred lis)
(cond [(null? lis) '()]
[(pred (car lis)) (cons (car lis) (filter pred (cdr lis)))]
[else (filter pred (cdr lis))]))
プログラミングGauche

プログラミングGauche