R, Python, Common Lispで内包表記っぽい何がしかの比較

内包表記、好きですか?僕は好きです。
シンプルな処理ならば簡潔に、しかも見通しよく書けますよね。
まあ、Pythonの内包表記については否定的な意見もあるようですが。。。
というわけで、いろいろな言語(というか、僕が知っている言語)で内包表記、または内包表記っぽいものを比較してみました。
ちなみにお題は1〜10の連番リストであるhogeから3の倍数を抽出しませう、というよくありがちなネタです
やはり、最初はPythonか。
Pythonの内包表記はすごくわかりやすくて柔軟だなーと思います。ただ、複雑になってくると可読性がものすごく下がるような。複雑な内包表記は避けるのがPython流?
次はCommon Lisp。CLで内包表記っぽいと言えば、LOOPマクロなんですか?よくわかってません。
最近、ちょこちょこCLを勉強しているのですが、とかくLOOPマクロは柔軟だな、と思いました。その代わり使いこなすには、結構時間がかかりそう。。。
最後は、Rいってみましょう。
三つの中でも、かなり特異です。これは、ベクトルを引数にとる論理演算子が論理値のベクトルを返すRならではの特徴を使ったフィルタリングなのです。
というわけで、三つ書いてみての感想。
一番トータル面で良さそうなのは、やはりPythonですかね。個人的な習熟度もありますがLOOPマクロは奥が深すぎる気がしますし、Rは柔軟性があまりありません。そんな書き方するんだったらapply関数族をさっさと使った方法が賢明だと思います。
この他の言語でも、Haskellとかにもあるんですね。ごめんなさい、全く知りません。多言語でこういう風にも書けるよ、というのがあったら教えてください。
-
前の記事
RがS式に着替えたら 2010.07.13
-
次の記事
anything-gist.elをちょこっと修正した 2010.07.28