リストの内包表記(list comprehensions)
ちょっと、Python に触れる機会があったんですけど、うーん・・・。
Python に、リスト内包表記ってのがあるんですけど、その文法が微妙。
list = [f(x, y) for x in A for y in B if x != y]
みたいなの。なんか中途半端。
Erlang とか Fortress だと、もうちょっとちゃんと数学記号ちっくに書けるんですけど。例えば、Erlang だと↓みたいな。
[f(x, y) || x <- A, y <- B, x /= y]
Fortress にいたっては↓みたいな。(元々「数式そのままでプログラミング」がコンセプト。あと、予約語とか演算子とかに Unicode を使えたりする。)
{f(x, y) | x←A, y←B, x≠y }
「内包」って言葉自体、元々数学用語なんで、数学ちっくに書ける方がきれいに思えるんですけど。
Python みたいに、for とか if とか書かなきゃいけないなら、いっそのこと C# 3.0 の LINQ クエリ構文でいいと思う。
var list = from x in A from y in B where x != y select f(x, y);
というか、改めて考えると、クエリ構文ってある意味、リスト内包みたいなものかも。