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だしね!