【gauche備忘録】 リストから一部分の要素だけを取り出して新しいリストにしたい

あるリストから一部の要素だけを抽出して、
それを元にして新しいリストを作成するときは、
mapじゃなくてfilter-map。



具体例:(1 2 3 4 5 6)のリストから、奇数だけからなる
リストを作成したいとき

mapを使った場合
(map
(lambda (x)
(if (odd? x)
x
#f))
'(1 2 3 4 5 6))


gosh> (1 #f 3 #f 5 #f)
計算結果を無条件でいれてしまうため、値が偽だろうが
なんだろうがリスト作成に使ってしまう。


filter-mapを使った場合
(filter-map
(lambda (x)
(if (odd? x)
x
#f))
'(1 2 3 4 5 6))


gosh> (1 3 5)
filter-mapは、計算の結果が真の値のみを
リスト作成に使うらしい。だから、#fみたいに偽の値は
無視される。
あと、filter-mapを使うときは(use srfi-1)が必要。


ほかの方のブログを見て「なんで備忘録なんてつけるんだろ」
と思ったけど、文章に残す作業をすることによって、記憶が
定着するのを促進させるためなんだろうなって思った。


別に「俺ってこんな発見したんだ、見てよ見てよ」と主張するために書いてるわけじゃあないのも分かった。


だって、自分以外のすべての人が知ってたとしても、この記事を書いてただろうからね。