2016/6/11 プログラミング言語基礎勉強会のLT発表資料です。
$MPKVSFͷجૅϓϩάϥϛϯάݴޠجૅษڧձ2016/06/11@athos0220
View Slide
ࣗݾհ‣ 5XJUUFS!BUIPT‣ χϟϯύε גॴଐ‣ $MPKVSFίϯτϦϏϡʔλ
$MPKVSFͷجૅΛ࡞Δͷࠓճ-JTQͱͯ͠ͷಛʹϑΥʔΧε-JTQؔϓϩάϥϛϯάରతϓϩάϥϛϯά+7.
-JTQ
-JTQ‣ લஔه๏͕ಛ‣ ࠷ॳͷཁૉ͕ΦϖϨʔλɺͦΕҎ͕߱Ҿ‣ ݴޠͷίΞ͕ඇৗʹγϯϓϧ(defn distance [x y](sqrt (+ (* x x)(* y y))))
-JTQ‣ લஔه๏͕ಛ‣ ࠷ॳͷཁૉ͕ΦϖϨʔλɺͦΕҎ͕߱Ҿ‣ ݴޠͷίΞ͕ඇৗʹγϯϓϧ(defn distance [x y](sqrt (+ (* x x)(* y y))))ΦϖϨʔλ Ҿ
$PEFBT%BUB‣ $MPKVSFίʔυΛ؆୯ʹσʔλͱͯ͠ѻ͑Δ‣ $MPKVSFͷσʔλͰίʔυΛॻ͍͍ͯΔͱ͍͑Δ(read-string “(* x x)”);=> (* x x)
$PEFBT%BUB‣ $MPKVSFίʔυΛ؆୯ʹσʔλͱͯ͠ѻ͑Δ‣ $MPKVSFͷσʔλͰίʔυΛॻ͍͍ͯΔͱ͍͑Δ(read-string “(* x x)”);=> (* x x)ͭͷγϯϘϧ Y Y͔ΒͳΔϦετ
ॲཧܥͰͷྲྀΕίʔυจࣈྻίʔυσʔλόΠτίʔυ
ॲཧܥͰͷྲྀΕίʔυจࣈྻίʔυσʔλόΠτίʔυϦʔυ ίϯύΠϧ
ϚΫϩ
ϚΫϩͱ‣ ίʔυ͔ΒίʔυͷมΛఆٛ͢Δؔ‣ Ϣʔβ͕͖ͳΑ͏ʹߏจΛఆٛͰ͖ΔΈ‣ ૉͳ͕Βڧྗͳϝλϓϩάϥϛϯάͷπʔϧ
ॲཧܥͰͷྲྀΕίʔυจࣈྻίʔυσʔλόΠτίʔυϦʔυ ίϯύΠϧϚΫϩల։
PSΛఆٛͯ͠ΈΔ‣ ͭΊͷࣜͷ͕USVFͩͬͨΒͭΊΛབྷධՁ(or (expr-1) (expr-2))(let [v (expr-1)](if vv(expr-2)))ల։
PSΛఆٛͯ͠ΈΔ(defmacro or [expr1 expr2]`(let [v# ~expr1](if v#v#~expr2)))
XJUIPQFOΛఆٛͯ͠ΈΔ‣ +BWBͷUSZXJUISFTPVSDFTͷΑ͏ͳߏจ(with-open [f (reader “foo”)](write-to-file f))(let [f (reader “foo”)](try(write-to-file f)(finally(.close f))))ల։
XJUIPQFOΛఆٛͯ͠ΈΔ(defmacro with-open [[name file] body]`(let [~name ~file](try~body(finally(.close ~name)))))
࣮։ൃͰͷϚΫϩ
$PNQPKVSF‣ $MPKVSFͷϧʔςΟϯάϥΠϒϥϦ(defroutes app-routes(GET “/” [] (index))(GET “/en” [] (index))(GET “/fr” [] (index-fr))(GET “/:greeting” [greeting](view greeting)))
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] …)
DPSFUZQFE‣ ੩తܕνΣοΫϥΠϒϥϦ(ann new-file [(U URI String) -> File])(defn new-file [s](if (string? s)(File. ^String s)(File. ^URI s)))
DPSFBTZOD‣ νϟωϧϕʔεͷඇಉظϓϩάϥϛϯάϥΠϒϥϦ(go(while true(let [v ((println v))))(go(loop [i 0](>! ch i)(recur (inc i))))ड৴ଆίʔυ ૹ৴ଆίʔυ
͓·͚‣ ϚΫϩඇৗʹڧྗͳͷͰѱ༻ͯ͠ݴޠࣗମΛେ෯ʹม͑ͯ͠·͏͜ͱͰ͖Δ‣ ྫʣΰϧϑ༻3VCZॲཧܥHPSVCZͷ฿ ϝιουΛॖܗͰݺΔ qFYNBUDIJOH- 1.up(10) {|i| p i}- [1,4,9].ew{|x,i| ps “#{i}:#{x}”}uptoeach_with_index puts
HPDMPKVSF(doseq [[l n](frequencies(map #(count (str %))(keys (ns-publics ’clojure.core))))](printf “%2d %s\n” l (apply str (repeat n \*))))ΦϦδφϧͷίʔυ
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Λͬͯॻ͖͑ͨίʔυ
·ͱΊ‣ -JTQͰ͋Δ͜ͱ$MPKVSFͷجૅΛ࡞Δཁૉͷͭ‣ ϚΫϩڧྗͳϝλϓϩάϥϛϯάͷπʔϧ‣ ࣮։ൃͰ͑Δ͞·͟·ͳศརϚΫϩ͕͋Δ‣ ͨͩ͠ཚ༻͗͢͠Δͱίʔυ͕ಡΊͳ͘ͳΔͷͰɺຊʹඞཁͳγνϡΤʔγϣϯΛݟۃΊΔ͜ͱ