List::UtilとかList::MoreUtilsというものを教えてもらったので、少し読んでみた(というか自分用のメモ的な意味合いが強いかも)
あと、リスト操作の動作確認するために、対話型のperlshを使ってるが便利だ。
List::Util
リストの最大、最小の要素を返したりとか。reduceで同じことができるのでreduce覚えておけばよい感じ。日本語訳
perlmolのChemistry::InternalCoords ::Builderだとこんな感じで使ってる。
$ref = ${ reduce { $a->[0] < $b->[0] ? $a : $b } map { [$atom->distance($_)] } grep { $_ ne $atom } @$atoms; }[1];
grep,mapでリストを操作した後、reduceを使ってお望みの要素を取り出すと。
というわけで、これといった例が思い浮かばないが、シュワルツ変換っぽく使えばリストでなくて要素が返ってくると。
List::MoreUtils
anyとかallとかのリストに対する真偽判断用の関数はこっち。日本語訳
pairwise、each_array、zipはfor文を入れ子にしなくてよくなるので、コードの見通しがよくなる感じ。
あと、QSAR記述子選択用のコード書くのに便利そうなのが、minmax(min==maxの記述子はこれでさくっと落とせる)。さらに、uniq組み合わせて、さらに数値のバリエーションのない記述子も落としていけるし、any使えばnullデータの入ってる記述子も排除できるので、今度preparation用のコードをList::MoreUtils使って書いてみよう。
fp::functionals
リスト操作用だけでなく、関数操作用のモジュールもあるだろうと探したら、やっぱありました。
もうちょいhaskellまともに書けるようになったら使ってみたい(かな?)が、今のところはperlで関数型っぽくかけるのはリスト操作で十分かもという気がしてる。