Yoichi's diary


2014-01-30

_ 403

数日アクセスできなくなっていたみたい。 Require all granted と書かないといけなかった。

_ [Haskell] すごいHaskell読書会 in 大阪 2週目 #1

初参加。グランフロントでかくてすごかったというのはさておき、みんなで練習の時間が楽しかった。

_ [Haskell] 復習

消化不良だった部分を復習してみた(ちゃんと理解できているわけではないので間違ったこと書いてるかも)
  1. 自分で定義した二項演算子の優先順位は?
    定義したもの同士は同じで、元々あったものよりは強いようだ。
    ghci> let tasu a b = a + b
    ghci> let kakeru a b = a * b
    ghci> 3 `tasu` 2 `kakeru` 2
    10 (左側が優先されてる)
    ghci> 3 `kakeru` 2 `tasu` 2
    8 (左側が優先されてる)
    ghci> 3 `tasu` 2 * 2
    10 
    ghci> 3 * 2 `tasu` 2
    12 (右側から先に計算されているので、tasu のほうが強い)
    
  2. 中置記法と前置記法で優先順位は同じ?
    前置が強いようだ。
     ghci> 3 + 2 * 2
    7
    ghci> (+) 3 2 * 2
    10
    ghci> 3 + (*) 2 2
    7
    
  3. [0.1,0.3..1] で最終要素が 1 を超えちゃってるのはバグ?
    仕様のようだ。
    http://stackoverflow.com/questions/7290438/haskell-ranges-and-floats 
     によると、増分を i として上限 + i/2 を超えたら打ち切るという定義とのこと。
    
  4. (*) 2 $ 1 + 3 が 8 になるのに対し、 ($) (*) 2 1 + 3 が 5 になるのは何故?
     (*) 2 $ 1 + 3 は (*) 2 (1 + 3) と同じで8、後者は ($) ((*) 2 1 +) 3 と等しいようだ。
    ($) (*) 2 1 + 3 * 4 は 14 で ($) ((*) 2 1 + 3 *) 4 はエラー。。。 
    まだちゃんと理解できていないので勉強が必要だ。