リストの内包表記(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);

というか、改めて考えると、クエリ構文ってある意味、リスト内包みたいなものかも。