Perlにおけるgrepが見つからない〜そこでTIMTOWTDIですよ!

Lispには高階関数が沢山用意されている.map族でいえば,mapにはじまり,mapcar, mapcan, mapcon, maplist, map-intoなどがある.ほとんど知らんし,使えん.

当然のことながら今までmapcarくらいしか使ったことがなかったのだが,そういやPerlにおけるgrepに相当する関数を知らないなと思った.
(調べ方が悪いのだけれど)見つからなかったから手持ちの写像関数で実装してみた.

mapcanは,リストの各要素に関数を適用した結果得られたリストをnconc(破壊的append)して返してくれる.これ使えばいいじゃん.

例えばリストの中で3より大きいという条件を満たす値を要素とするリストを取得する.
普通に書くのは嫌だったので,Perlっぽく書いてみた.Perl6のsayも使ってますぜ

use Perl6::Say;
foreach ( grep { $_ > 3 } (3, 4, 5) ){
  say
}
__END__
出力結果
4
5


Lispだったらmapcan使ってこう書く

(mapcan #'(lambda (x)
	    (if (> x 3) (list x) nil)) '(3 4 5))
; (4 5)


うん,TIMTOWTDIだしね!