«前の日記(2004年03月28日) 最新 次の日記(2004年03月30日)» 編集

Matzにっき


2004年03月29日 [長年日記]

_ [本]Lightweight Language Magazine

届いた。全体に去年のLL Saturdayの雰囲気を活字でよく再現している。 行かなかった(行けなかった)人も、これを読めば大丈夫。 追加されている記事もあるので、行った人も楽しめると思う。

私の原稿は3本。

  • Lightweight Language Magazineに寄せて

    Larry Wall(Perl), Guido van Rossum(Python), Zeev Surasuki(PHP), そして私(Ruby)、 という言語デザイナーによる献辞。 なんて豪華な。注目点は実はそれぞれの写真だったりするかも。

  • Lightweight Languageとは?

    LLの定義について。Matz流「俺定義」が炸裂します。

  • Language Update

    Rubyの最近と将来について。他の言語に比べておとなしすぎるかなあ。

_ [言語]List Comprehension(リスト内包表現)

LLMで思い出したけど、Pythonに最近加わった。 List Comprehension(p.136)って記法としてはあんまり嬉しい気がしないんだけど。 いっそ、Haskellのみたいにすれば良かったのに。 Pythonが記号的な表現を嫌うのはわかるけど、 もっとコンパクトな記法の方が元々のPythonの性格に合っているのではないかと(そのためにblock by indentationとか導入したんだと思うし)。 まあ、言語の性格はだんだん変わるものではあるけどな。

Python版:

def qsort(list):
  if not list:
    return []
  x, xs = list[0], list[1:]
  return qsort([y for y in xs if y < x]) + [x] +\
         qsort([y for y in xs if y >= x])

Haskel版:

qsort [] = []
qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_ge_x
                where
                  elts_lt_x = [y | y <- xs, y < x]
                  elts_ge_x = [y | y <- xs, y >= x]

Rubyには要らないと思う。Enumerableとブロックの組み合わせが十分強力だから。

def qsort(list)
  if list.size == 0
    return []
  end
  x, *xs = *list
  elts_lt_x, elts_ge_x = xs.partition{|y| y < x}
  qsort(elts_lt_x) + [x] + qsort(elts_ge_x)
end

ちゅーか、ブロックのパワーに比べたらList Comprehensionは中途半端。 Pythonにもlambdaがあるからいくらでも似たようなことができるはずなのに。 Guidoはlambdaは好きじゃないらしい。


«前の日記(2004年03月28日) 最新 次の日記(2004年03月30日)» 編集