おねーさんです。
今日も昨日も行き帰りの電車の中では”すごいHaskell”を読み、速やかに昏睡状態へと移行する動作を続けております。Haskellはすごい。
ここ数日で最もいらいらするのは畳み込みです。
foldl。そうか。foldl1。ちょっとちがう内容だから数字つけたのね。そうか。いや、これは看過できぬ。
きっと深淵で無駄のない洗練された理由があるんだとは思いますけど、いまのあたしはこう思う。
「ほんとに頭の良い人が作ったの?センス悪くない?あまりにも場当たり過ぎじゃない?」
こういうところでガックリきて、はーまじかーなえるわーってなって寝るんだわ。
#foldlというのは左畳込みとかいう処理をする関数さんであるらしいです。なるほどわからん。
tnomura9さんの「tnomuraのブログ」というサイトをこないだ見つけて、たまに読んでいます。
「Haskell 記事リスト」というカテゴリがまとめられていて、まだ最初の方だけしか読めてないけれど、書き口がわかりやすくて読みやすい。
すごいHaskellとともにこのサイトを副読本として読んでいこうと思います。ありがたいなあ、こういう記事を置いてくれる人がいて。
いろんな表現があるのだな
その、tnomura9さんのページに例題が出ているので、それをちょいちょいやってみる。
「1から10までの数の2倍の数のリストを出す」
あたし: Prelude> [x*2 | x <- [1..10]]
リスト内包表記だ。Pythonで覚えたんだワイルドだろう。
上記のページ: Prelude> map (* 2) [1..10]
オ-ゥ。
もうここで違う。結果は同じよ?同じなんだけど、map関数を使うこと、「(*2)って関数」を与えること、このへんの発想があたしに欠落しているということがよくわかる。
はーなるほど。次。
「1から10までの数の平方数はどうだろうか。」
次の行を読まずにまず自分で書く。わかってんだよmapだろmap。
あたし: Prelude> map (^2) [1..10]
で、
上記のページ: Prelude> map (\n -> n * n) [1..10]
む、むめいかんすう。。。
むろんやってることは同じではございますが、そういう表現もあることを知った上で、どっちの書き方を選択するか、といったふうにしておきたいものです。
Prelude> :t \n -> n*n \n -> n*n :: Num a => a -> a Prelude> :t (^2) (^2) :: Num a => a -> a
Python覚えたての頃、何をやってたかを書き残しておけばよかったなあ。言語ってどうやって覚えるんだっけなー。