Slide 1

Slide 1 text

$MPKVSFͷجૅ ϓϩάϥϛϯάݴޠجૅษڧձ 2016/06/11 @athos0220

Slide 2

Slide 2 text

ࣗݾ঺հ ‣ 5XJUUFS!BUIPT ‣ χϟϯύε ג ॴଐ ‣ $MPKVSFίϯτϦϏϡʔλ

Slide 3

Slide 3 text

$MPKVSFͷجૅΛ࡞Δ΋ͷ ࠓճ͸-JTQͱͯ͠ͷಛ௃ʹϑΥʔΧε -JTQ ؔ਺ ϓϩάϥϛϯά ର࿩త ϓϩάϥϛϯά +7.

Slide 4

Slide 4 text

-JTQ

Slide 5

Slide 5 text

-JTQ ‣ લஔه๏͕ಛ௃ ‣ ࠷ॳͷཁૉ͕ΦϖϨʔλɺͦΕҎ͕߱Ҿ਺ ‣ ݴޠͷίΞ͕ඇৗʹγϯϓϧ (defn distance [x y] (sqrt (+ (* x x) (* y y))))

Slide 6

Slide 6 text

-JTQ ‣ લஔه๏͕ಛ௃ ‣ ࠷ॳͷཁૉ͕ΦϖϨʔλɺͦΕҎ͕߱Ҿ਺ ‣ ݴޠͷίΞ͕ඇৗʹγϯϓϧ (defn distance [x y] (sqrt (+ (* x x) (* y y)))) ΦϖϨʔλ Ҿ਺

Slide 7

Slide 7 text

$PEFBT%BUB ‣ $MPKVSFίʔυΛ؆୯ʹσʔλͱͯ͠ѻ͑Δ ‣ $MPKVSFͷσʔλͰίʔυΛॻ͍͍ͯΔͱ΋͍͑Δ (read-string “(* x x)”) ;=> (* x x)

Slide 8

Slide 8 text

$PEFBT%BUB ‣ $MPKVSFίʔυΛ؆୯ʹσʔλͱͯ͠ѻ͑Δ ‣ $MPKVSFͷσʔλͰίʔυΛॻ͍͍ͯΔͱ΋͍͑Δ (read-string “(* x x)”) ;=> (* x x) ͭͷγϯϘϧ Y Y͔ΒͳΔϦετ

Slide 9

Slide 9 text

ॲཧܥͰͷྲྀΕ ίʔυ จࣈྻ ίʔυ σʔλ όΠτίʔυ

Slide 10

Slide 10 text

ॲཧܥͰͷྲྀΕ ίʔυ จࣈྻ ίʔυ σʔλ όΠτίʔυ Ϧʔυ ίϯύΠϧ

Slide 11

Slide 11 text

ϚΫϩ

Slide 12

Slide 12 text

ϚΫϩͱ͸ ‣ ίʔυ͔Βίʔυ΁ͷม׵Λఆٛ͢Δؔ਺ ‣ Ϣʔβ͕޷͖ͳΑ͏ʹߏจΛఆٛͰ͖Δ࢓૊Έ ‣ ૉ๿ͳ͕Βڧྗͳϝλϓϩάϥϛϯάͷπʔϧ

Slide 13

Slide 13 text

ॲཧܥͰͷྲྀΕ ίʔυ จࣈྻ ίʔυ σʔλ όΠτίʔυ Ϧʔυ ίϯύΠϧ

Slide 14

Slide 14 text

ॲཧܥͰͷྲྀΕ ίʔυ จࣈྻ ίʔυ σʔλ όΠτίʔυ Ϧʔυ ίϯύΠϧ ϚΫϩల։

Slide 15

Slide 15 text

PSΛఆٛͯ͠ΈΔ ‣ ͭΊͷࣜͷ஋͕USVFͩͬͨΒͭΊΛ୹བྷධՁ (or (expr-1) (expr-2)) (let [v (expr-1)] (if v v (expr-2))) ల։

Slide 16

Slide 16 text

PSΛఆٛͯ͠ΈΔ (defmacro or [expr1 expr2] `(let [v# ~expr1] (if v# v# ~expr2)))

Slide 17

Slide 17 text

XJUIPQFOΛఆٛͯ͠ΈΔ ‣ +BWBͷUSZXJUISFTPVSDFTͷΑ͏ͳߏจ (with-open [f (reader “foo”)] (write-to-file f)) (let [f (reader “foo”)] (try (write-to-file f) (finally (.close f)))) ల։

Slide 18

Slide 18 text

XJUIPQFOΛఆٛͯ͠ΈΔ (defmacro with-open [[name file] body] `(let [~name ~file] (try ~body (finally (.close ~name)))))

Slide 19

Slide 19 text

࣮։ൃͰͷϚΫϩ

Slide 20

Slide 20 text

$PNQPKVSF ‣ $MPKVSFͷϧʔςΟϯάϥΠϒϥϦ (defroutes app-routes (GET “/” [] (index)) (GET “/en” [] (index)) (GET “/fr” [] (index-fr)) (GET “/:greeting” [greeting] (view greeting)))

Slide 21

Slide 21 text

DPSFNBUDI ‣ ύλʔϯϚονϥΠϒϥϦ (match inst [:mov z x] (recur (subst z x) insts) [:add z x y] (recur (do-op + z x y) insts) [:sub z x y] (recur (do-op - z x y) insts) [:push z x] (recur (push z x) insts) [:pop z] (recur (pop z) insts) [:jnz l] (if (:flag env) [l env] (recur env insts)) [:jz l] (if (:flag env) (recur env insts) [l env] …)

Slide 22

Slide 22 text

DPSFUZQFE ‣ ੩తܕνΣοΫϥΠϒϥϦ (ann new-file [(U URI String) -> File]) (defn new-file [s] (if (string? s) (File. ^String s) (File. ^URI s)))

Slide 23

Slide 23 text

DPSFBTZOD ‣ νϟωϧϕʔεͷඇಉظϓϩάϥϛϯάϥΠϒϥϦ (go (while true (let [v (! ch i) (recur (inc i)))) ड৴ଆίʔυ ૹ৴ଆίʔυ

Slide 24

Slide 24 text

͓·͚ ‣ ϚΫϩ͸ඇৗʹڧྗͳͷͰѱ༻ͯ͠ݴޠࣗମΛେ෯ ʹม͑ͯ͠·͏͜ͱ΋Ͱ͖Δ ‣ ྫʣΰϧϑ༻3VCZॲཧܥHPSVCZͷ໛฿  ϝιουΛ୹ॖܗͰݺ΂Δ qFYNBUDIJOH  - 1.up(10) {|i| p i} - [1,4,9].ew{|x,i| ps “#{i}:#{x}”} upto each_with_index puts

Slide 25

Slide 25 text

HPDMPKVSF (doseq [[l n] (frequencies (map #(count (str %)) (keys (ns-publics ’clojure.core))))] (printf “%2d %s\n” l (apply str (repeat n \*)))) ΦϦδφϧͷίʔυ

Slide 26

Slide 26 text

HPDMPKVSF (doseq [[l n] (frequencies (map #(count (str %)) (keys (ns-publics ’clojure.core))))] (printf “%2d %s\n” l (apply str (repeat n \*)))) (goclojure (dq [[l n] (qs (mp #(ou (sr %)) (ks (nsb ’clojure.core))))] (pf “%2d %s\n” l (ay sr (rep n \*)))) ΦϦδφϧͷίʔυ HPDMPKVSFΛ࢖ͬͯॻ͖׵͑ͨίʔυ

Slide 27

Slide 27 text

·ͱΊ ‣ -JTQͰ͋Δ͜ͱ͸$MPKVSFͷجૅΛ࡞Δཁૉͷͭ ‣ ϚΫϩ͸ڧྗͳϝλϓϩάϥϛϯάͷπʔϧ ‣ ࣮։ൃͰ࢖͑Δ͞·͟·ͳศརϚΫϩ͕͋Δ ‣ ͨͩ͠ཚ༻͗͢͠Δͱίʔυ͕ಡΊͳ͘ͳΔͷͰɺ ຊ౰ʹඞཁͳγνϡΤʔγϣϯΛݟۃΊΔ͜ͱ