List comprehensionsとrubyのeach
Posted 7月 25th, 2009 by hippos
in
すっかり堅くなった頭をほぐしながらですが、Haskell勉強中です。
今日、リスト内包表記のサンプルとして取り上げられることの多いqsortのコードを眺めていて気がついたのですが、
qsort[] = []
qsort(x:xs) = qsort smaller ++ [x] ++ qsprt lerger
where
smaller = [ a | a <- xs, a<=x]
larger = [ b | b <- xs, b> x]リスト内包記法(smallerとlargerの)部分って、どこかで見たことあると思ったらこれってrubyの"each { | a |”にそっくりなんですよね。
xs = [1,2,3,4,5]
xs.each { |a|
print a if a <= x
}Haskellの記法は
A ∩ B = { x | x ∈ A and x ∈ B }みたいな、とおお〜い記憶の彼方にある数学の集合演算の記法をもとににしているようで、rubyのeach構文もきっとこれをもとにしたのだろうなということが今日わかりました(もちろん、たぶんですが....)
Haskellの構文は数学の素養豊な人にはHaskellの記法もスンナリ頭に入るのかもしれませんが、僕の場合だとrubyの構文のほうがやっぱりわかりやすい気がします。今日の今日まで、なぜeachは"each { | x |"という記法なのか?などということは考えたこともなかったので、"あるプログラミング言語の構文がなぜこのような記法となっているのか?”ということに思い至っただけでもHaskellの勉強を始めた意義があるってモン
ですね。それにしてもHaskellの勉強は遅々としてすすみません!(^^ゞ
この記事のトラックバックURL:
http://hippos-lab.com/blog/trackback/325






最近のコメント
34 weeks 5 days ago
51 weeks 5 days ago
51 weeks 5 days ago
1年 16 weeks ago
1年 16 weeks ago
1年 17 weeks ago
1年 28 weeks ago
1年 28 weeks ago
2 years 8 weeks ago
2 years 17 weeks ago