Unyablog.

のにれんのブログ

Haskell入門8日目

八日目

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

バイト先で見てます!!!って言われたし頑張ります!!!

よく考えたら明日も東京いくまでの間にできるじゃん。

5.6

  • $ ... jQuery かな?
  • これ、括弧がいらなくなるやつでは…!!!!
    • 括弧面倒臭かったんだよねえ
  • map とかめっちゃ便利じゃん
  • とにかく便利だった

  • 突然わけのわからない map が出てきた

    • $3 とは…
    • 関数適用それ自身を関数として扱えるようにする
    • $ に関数が入って、その引数に3をするということ
      • sqrt $ 3 => 1.73...
      • ($) sqrt 3 => 1.73...
      • + 的な中置関数に見える
  • 関数を引数にとったセクション評価されるのが後回しになる という2つの意味がありそう。

5.7

  • 要するに h x = f $ g x が省略して書けるってことかな
    • f.g $ 2 みたいに書けるんだね
    • ラムダ式書くときに使えそう
  • なんでreplicate 2 . max 6 7 は無理なのに replicate 2 . max 6 $ max 6 7 はいけるんだろう。
    • 全体的に最後の数値の前に $ さえつければいけるなあ
    • 30分以上悩んでた。
map (+6) . zipWith (+) [1,2] [2,3]

としてしまうと

((map (+6)) . (zipWith (+) [1,2] [2,3]))

になってしまって、こうしてしまうと右側を無理に関数と読もうとしておかしくなるのでは?という感じに落ち着きました。

直前に $ おけばいけるのはカリー化のおかげですね。

  • 要するに数値であり関数ではない ということ。
    • 上の式で too many arguments って怒られたんですけど関数を返すと考えれば当たり前ですね。
    • なんでこんなんにこんな悩んでたんだろ。
  • ポイントフリースタイル、さっきまで考えてたことを踏まえればわかりやすかった

感想

  • 無理にこういう仕様だと納得せずに考えたらわかったのでよかった
    • (昔からこうだからちゃんとやろうとするとめちゃくちゃ遅くなるのがアレ)