Upgrade to Pro — share decks privately, control downloads, hide ads and more …

型システム入門以前

Yuya Kono
November 11, 2017

 型システム入門以前

ひろしま学生IT勉強会 https://connpass.com/event/70401/ で発表した資料です

Yuya Kono

November 11, 2017
Tweet

More Decks by Yuya Kono

Other Decks in Programming

Transcript

  1. ࢼ͢ͷ͸͜Ε int f(int a, int b) { return a +

    b; } f(19 + "23")を実⾏する この式は型エラーを起こす
  2. ಈతܕݕࠪ ੩తܕݕࠪ 19 + "23" a :: int b ::

    int f :: int * int → int ͦͷ·· Λ࣮ߦͯ͠ΈΔ ؔ਺ఆ͔ٛΒɺม਺ͱܕͷࣙॻΛ࡞Δ
  3. ಈతܕݕࠪ ੩తܕݕࠪ 19 + "23" Ͳ͏ͯ͜͠͏ͳͬͨ ੹೚ऀ͸୭ͩ int a =

    19 int b = "23" G   ͸ਖ਼͍ࣜ͠Ͱ͸ͳ͍ ίϯύΠϧΤϥʔ f(19, "23")
  4. ύϥϝʔλଟ૬ ∀a id(a x) { return x; } id(-1) ==

    -1 id(3.14) == 3.14 id("hello") == "hello" id(12) + "32"のような式は 型エラーになる
  5. ΞυϗοΫଟ૬ string show(int x) { int2str(x); } string show(int xs[])

    { concat(map(int2str, xs)); } void println(Show x) { printf("%s¥n", show(x)); }
  6. ܕਪ࿦ w +BWB  ɺ$ BVUP EFDMUZQF ɺ0$BNMɺ)BTLFMMͳͲ w ม਺ͷ࢖ΘΕํͳͲΛௐ΂ɺࣗಈͰܕΛ͸͖͡ग़͢

    w ܕΛॻ͘ख͕ؒݮΔ w ڧྗͳ΋ͷʹͳΔͱɺ·ͬͨ͘ܕΛࢦఆ͠ͳͯ͘΋ ͢΂ͯ੩తʹܕΛ͸͖͡ग़ͤΔʢ0$BNMɺ)BTLFMMͳͲʣ w ܕγεςϜ͕ڧྗʹͳΔͱΘΓͱ͙͢ʹͭΒ͘ͳΔ
  7. ܕਪ࿦ c_area(r) { return r * r * 3.14; }

    上の宣⾔はコンパイル時に下の宣⾔に変換される double c_area(double r) { return r * r * 3.14; }
  8. ґଘܕ w $PRɺ*ESJTͳͲ w ܕίϯετϥΫλΛ஋Λड͚औΕΔΑ͏ʹ֦ு͠ɺ ஋ʹґଘ͢ΔܕΛಋೖ w DPOT㱼B  O/BU

    B7FDUPSBO7FDUPSB O  Έ͍ͨͳࣄ͕Ͱ͖ Δ w 4ZTUFN'Тʹಋೖ͢Δͱ$BMDVMVTPG$POTUSVDUJPOTͱݺ͹ΕΔମܥʹͳ Δ w $PR͸$P$͕ϕʔεɻܕΛ໋୊ɺ࣮૷Λূ໌ͱղऍ͢Δ w ܕݕ͕ܾࠪఆՄೳੑ໰୊ΛؚΜͰ͍ΔͷͰɺखͰܕݕࠪΛαϙʔτ͢Δ ඞཁ͕͋Δ