万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    第1回 スタートHaskell2

    @start_haskell

    初心者の敷居を下げる

    URL:http://atnd.org/events/29448

    ・(0章) イントロダクション
    http://www.slideshare.net/YasuyukiOgawa/ss-13433189

    ・スタートHaskellって?
    http://www.slideshare.net/YasuyukiOgawa/haskell-13433200

    ・2章「型を信じろ」
    http://www.slideshare.net/skoji/haskell2-13424552

    HaskellはPure
    変数はない? 最大代入できない

    バイナリをなるべく使おう
    STOPと公式にある
    7.4.2が最新
    Platform7.4.1が最新
    他の処理系は無視していい

    !=ではなく/=
    True, Falseは大文字

    > :t succ
    succ :: Enum a => a -> a
    > 1 == True 
    False
    • は特殊

    →マイナスか引き算かは曖昧

    :t negate

    ghci> ['z','v'..'a']
    "zvrnjfb"

    let aList = [1..20]
    take 2 (tail aList) ++ [last(init aList)]
    
    take 2 (tail aList) ++ last (init aList) :[]
    
     1:2:3:4:5:[]
    head 1..10:[] 
    
    
    take 10  [x | x <- [1..], y <- [1..10], x `mod` y == 0]

    ・動くけど遅い

     head [x|x <- [1,2..],x `mod` 1 == 0 && x `mod` 2 == 0 && x `mod` 3 == 0 && x `mod` 4 == 0 && x `mod` 5 == 0  && x `mod` 6 == 0 && x `mod` 7 == 0 && x `mod` 8 == 0 && x `mod` 9 == 0 && x `mod` 10 == 0]
    2520
    head [(a,b,c)|c<-[1..998], b<-[1..c],a<-[1..b],a^2 + b^2==c^2, a+b+c == 1000]

    リスト内包表記は軽い条件を先に書こう


    head [(a,b,c) | a<-[1..998], b<-[a..999],a<-[1..b], let c=1000-a-b,a^2 + b^2==c^2]
    まだ習ってないモナドのlet

    これも
    [(a,b,(1000-a-b)) | a<-[1..998], b<-[a..998], a^2 + b^2 == (1000-a-b)^2]

    型宣言は良い習慣


    Int
    Intefer 誘拐じゃない

    1.0はFlactional(Int ot Float)

    Int*IntはOK
    Int*Integerじゃエラー

    型安全
    型変換するときは必ず書かないといけない

    C言語

    1. は組み込み

    暗黙の型変換


    リテラルと数字は違う

    2+2.5
    Intから型変換は起こってない
    2はIntなのは錯覚
    2 -> Num型クラスのなにか
    まず2はNumと判断され+が適用されて後の2.5に引きづられて2はFloatと判断されるのか


    どんだけ型を厳しくするかがHaskellの素晴らしさ

    Numは型クラス

    C#のみたいにリフレクションはない

    ダイナミックローディングは「基本的にはない」。

    [1..10]: !! 0
    [[1,2,3,4,5,6,7,8,9,10]*** Exception: Prelude.(!!): index too large
    ↓こうする
    ghci> ([1..10]:
    ) !! 0

    優先順位が:より!!が強いため、()を使う。


    ・読み方
    ghci> :t 2
    2 :: Num a => a
    「 =>」n左側は、制約の型 Num
    aが実際の型クラス

    ghci> :t "2"
    "2" :: [Char]

    演習
    http://wiki.haskell.jp/Workshop/StartHaskell/LYHGG/exercise/2

    ・Haskelでテスト
    http://www.slideshare.net/ShokoSasaki/haskell-13433770

    ・HUnit
    cabal install HUnit

    https://github.com/shokos/Haskell_test_tut

    Codeforces


    ・48時間でお覚えられる
    http://ja.wikibooks.org/wiki/48%E6%99%82%E9%96%93%E3%81%A7Scheme%E3%82%92%E6%9B%B8%E3%81%93%E3%81%86