2017/09/25のLisp meetup #56の発表資料です。
$MPKVSF֓ཁհ-JTQNFFUVQPO!BUIPT
View Slide
֓ཁ‣ ͷϦϦʔε͕ؒۙ CFUB͕ઌिΑ͏͘ϦϦʔε DGϦϦʔε݄ BMQIBϦϦʔε݄ དྷ݄ͷ$POKʹ߹ΘͤͯϦϦʔεͷՄೳੑ‣ pOBMϦϦʔεʹ͚ͯͷओཁͳมߋΛ͓͞Β͍
$MPKVSFͷओཁͳมߋ‣ DMPKVSFTQFD‣ ໊લۭ͖ؒͭϚοϓ OBNFTQBDFENBQT‣ /B/*OG*OGͷ৽͍͠֎෦දݱ
DMPKVSFTQFD‣ ड़ޠΛϕʔεʹͨ͠σʔλ༷ͷهड़"1* ৄࡉʮDMPKVSFTQFDʯͰݕࡧ‣ ҎԼͷ༻్ʹ͑Δ υΩϡϝϯςʔγϣϯ όϦσʔγϣϯ ౷ҰతͳΤϥʔϨϙʔτ ϓϩύςΟϕʔεςετ 4ࣜͷߏจղੳ‣ ·ͩΞϧϑΝѻ͍ TQFDBMQIBͱͯ͠$MPKVSFຊମͱಠཱʹ։ൃ͞Ε͍ͯ͘༧ఆ
$MPKVSF͔Βͷߏ‣ $MPKVSF͕TQFDBMQIBͱDPSFTQFDTBMQIBʹґଘ͢Δߏʹ‣ TQFDBMQIB TQFDͷػೳఆٛ‣ DPSFTQFDTBMQIB $MPKVSFͷίΞϥΠϒϥϦͷεϖοΫఆٛ$MPKVSFTQFDBMQIBDPSFTQFDTBMQIB
DMKίϚϯυ‣ ͜Ε·Ͱͷ$MPKVSFKBSͭΛμϯϩʔυͯ͘͠Ε͕͑ͨɺ͔ΒTQFDBMQIBͱDPSFTQFDBMQIBʹґଘ‣ ґଘϥΠϒϥϦΛղܾͯ͠$MPKVSFΛ͑Δঢ়ଶʹ͢Δखஈͱͯ͠DMKίϚϯυ͕༻ҙ͞Εͨ‣ “brew install clojure”Ͱ$MPKVSF͕͑ΔΑ͏ʹ ଞͷύοέʔδϚωʔδϟʹਵ࣌Ճ͞ΕΔ༧ఆ
TQFDϕʔεͷϚΫϩߏจνΣοΫ‣ ϚΫϩʹରͯ͠εϖοΫΛఆ͓ٛͯ͘͠ͱɺίϯύΠϥ͕ࣗಈతʹߏจ͕εϖοΫʹ߹͍ͬͯΔ͔ΛνΣοΫ‣ ౷Ұతͳํ๏ͰΤϥʔΛฦͯ͘͠ΕΔ
ʲએʳ1JOQPJOUFS‣ ࡞ͷεϖοΫΤϥʔϨϙʔλ1JOQPJOUFSͰɺεϖοΫΤϥʔΛ͔Γ͘͢දࣔͯ͘͠ΕΔʂ ϋΠϥΠτ͖ͭ
EPDͷTQFDαϙʔτ
ड़ޠؔͷ֦ॆ‣ boolean?‣ int? pos-int? neg-int? nat-int?‣ double? bigdec?‣ ident? simple-ident? qualified-ident?‣ simple-symbol? qualified-symbol?‣ simple-keyword? qualified-keyword?‣ bytes?‣ indexed?‣ uuid? uri?‣ seqable?‣ any?
໊લۭ͖ؒͭϚοϓ‣ TQFD໊લۭ͖ؒͭͷΩʔϫʔυΛଟ༻ ϚοϓͷΩʔͱͯ͠͏ࡍʹɺҰҙͷҙຯΛ࣋ͨͤΔͨΊ‣ ͯ͢ͷΩʔ͕ಉ໊͡લۭؒͰम০͞Ε͍ͯΔ߹ͷলུه๏#:foo{:a 1, :b 2}(require ‘[foo.core :as foo])#::foo{:a 1, :b 2}#::{:a 1, :b 2}{:foo/a 1, :foo/b 2}{:foo.core/a 1,:foo.core/b 2}{:user/a 1, :user/b 2}
໊લۭ͖ؒͭϚοϓͷଋറ‣ ϚοϓͷଋറͰ໊લۭ͖ؒͭͷΩʔϫʔυΛѻ͍͍͢Α͏ʹ
/B/*OG*OGͷ৽͍͠֎෦දݱ‣ ৽ͨʹ##ͱ͍͏ϦʔμʔϚΫϩ͕Ճ͞Εͨ /B/##NaN *OpOJUZ##Inf *OpOJUZ##-Inf‣ ʹఏҊ͞Εɺӽ͠ͰΑ͏͘࠾
ͦͷଞͷมߋ‣ *reader-resolver*ͰγϯϘϧΩʔϫʔυͷղܾͷํ͕QMVHHBCMFʹ‣ InstϓϩτίϧͷՃ‣ swap-vals! reset-vals!‣ halt-whenτϥϯεσϡʔα
·ͱΊ‣ $MPKVSFϦϦʔε͕ؒۙ‣ DMPKVSFTQFDΛத৺ͱͨ͠มߋ͕Γࠐ·Εͨ‣ TQFDࣗମ·ͩΞϧϑΝѻ͍ͷ·· ͳͷͰɺ༷มߋ͋Γ͏Δ͕ͩɺ͕Ұ୴ϦϦʔε͞ΕΕϓϩμΫτͰຊ֨తʹΘΕ࢝ΊΔ͜ͱ͕༧͞ΕΔ
ࢀߟจݙ‣ DIBOHFTNE IUUQTHJUIVCDPNDMPKVSFDMPKVSFCMPCNBTUFSDIBOHFTNEDIBOHFTUPDMPKVSFJOWFSTJPO‣ "CPVUTQFD IUUQTDMPKVSFPSHBCPVUTQFD‣ 3FBEQSJOUSPVOEUSJQGPS*OpOJUZBOE/B/ IUUQTEFWDMPKVSFPSHKJSBCSPXTF$-+