SlideShare a Scribd company logo
gfngfn
45:4'*ʢαςΟεϑΝΠʣͱ͸
w ߨԋऀ͕೥౓*1ະ౿ࣄ‫ۀ‬ͷϓϩδΣΫτͱͯ͠։ൃͨ͠
ൺֱత৽͍͠૊൛ॲཧγεςϜ
w ੩త‫͖ͭܕ‬ͷ͍ΘΏΔവ਺‫ܕ‬ͷϓϩάϥϛϯά‫Ͱޠݴ‬
ύοέʔδ΍จॻຊମ͕ॻ͚Δ
r ҰൠతͳϓϩάϥϜͱಉ͡ཁྖͰಡΈॻ͖Ͱ͖ΔͷͰ
ΧελϚΠζੑ͕ߴ͍
w DG59-
59ɿෳࡶͳҙຯ࿦Ώ͑ʹύοέʔδ࡞੒ʹ͸஁࿉Λཁ͢Δ্ɼ
ख़࿅ऀͰ΋ଞਓͷॻ͍࣮ͨ૷͸ಡΜͰվม͢Δͷ͕೉͍͠
r ‫هͨͬޡ‬ड़Λͨ͠ͱ͖΋ɼ‫ʹࠪݕܕ‬Αͬͯਝ଎ʢయ‫ܕ‬తʹ͸ඵ΄Ͳʣ
͔ͭ‫ݪ‬ҼͷղΓ΍͍͢ΤϥʔใࠂΛग़ͯ͘͠ΕΔ܏޲ʹ͋Δ
w DG59-
59ɿࠣࡉͳϛεͰ΋े਺ඵ଴͔ͬͯΒղΓʹ͍͘Τϥʔ͕ग़͕ͪ
֓ཁ
45:4'*ͷ঺հ
w ։ൃಈ‫ػ‬ɾ໨తҙࣝͷ‫ڞ‬༗
w 11-ʹࢀՃ͞ΕΔํʑͷؔ৺ͱরΒ͠߹Θͤɼ
૊൛ॲཧɾจॻ࡞੒ͱ͍ͬͨ༻్ʹཁ੥͞Εͯ
45:4'*ʹͲΜͳEPNBJOTQFDJpDͳҙຯ࿦΍‫ܕ‬γεςϜ͕
౥ࡌ͞Ε͍ͯΔ͔Λ֓આ
w ͦͷଞɼ༗ࢤͷํʑʹΑΔ45:4'*ύοέʔδ΍पลπʔϧͷ঺հ
ຊߨԋͷ಺༰
w։ൃಈ‫ػ‬ɾ໨తҙࣝ
w ಈ࡞σϞ
w จࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬
w จॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ
w ߦ෼ׂॲཧͷ࢓૊Έ
w ଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4-
w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ
w ·ͱΊ
໨࣍
େผͯ͠छྨɿ
จॻ࡞੒ιϑτ΢ΣΞͷ‫ܗ‬ଶ

8:4*8:(ΤσΟλ
ϚʔΫΞοϓ‫ޠݴ‬ʴॲཧ‫ܥ‬
troff [Microsoft 1983] [Adobe 1991]
[Quark 1987]
[Lamport 1985]
[Knuth 1978]
[Gruber 2004]
[Osanna 1973]
ɾ
RE:VIEW
[੨໦ et al. 2002]
લॲཧ༻్
8:4*8:(ΤσΟλํࣜͱൺ΂ͯɼ܏޲ͱͯ͠ɿ
ϚʔΫΞοϓ‫ࣜํޠݴ‬ͷੑ࣭

😄 😩
• Ϣʔβ͕ෆద֨ͳίʔυΛ
ೖྗͱͯ͠༩͑΍͍͢
• ࠩ෼؅ཧ͕୯७
• ϢʔβఆٛίϚϯυʹΑΓɿ
• ෳࡶͳࣗಈॲཧ͕࣮‫ݱ‬Մೳ
• จॻͷମࡋ͕
‫͔ޙ‬ΒॊೈʹมߋՄೳ
͜ͷಛ௃Λ‫͍͔ͨ͠׆‬ਓ͕૝ఆϢʔβ ͲͷΑ͏ʹΤϥʔ͕ใࠂ͞ΕΔ͔͕
ࣥචޮ཰ʹӨ‫ڹ‬
ྫɿ59-
59
w Τϥʔใࠂ͕ෆ਌੾Ͱ஗͍܏޲ʹ͋Δ
r ͜ΕΏ͑ʹɼগ͠‫ॲͨͬڽ‬ཧΛఆٛ͠Α͏ͱ͢Δͱσόοά͕ࠔ೉
r ॲཧ‫ܥ‬ͷ࣮૷͕ଵଦͳͷͰ͸ͳ͘ɼ59ͷ΋ͭૢ࡞తҙຯ࿦ͷ౎߹্
ෆ਌੾ͳΤϥʔʹͳΒ͟ΔΛಘͳ͍ͱ͍͏ଆ໘͕େ͖͍
खͷࠐΜͩࣗಈॲཧ͕ఆٛͰ͖ͭͭɼl໌Β͔ͳϛεzʹ͸਌੾ͳΤϥʔ͕
ग़ͤΔΑ͏ͳߏจɾҙຯ࿦ͷ‫͍ͨ͠ʹޠݴ‬
‫ط‬ଘγεςϜͷऑ఺

! Undefined control sequence.
! Missing $ inserted.
! Missing number, treated as zero.
੩త‫Ͱ͖ͭܕ‬ɼ59-
59ίʔυΛग़ྗ͢ΔΑ͏ͳ
‫ޠݴ‬Λ૑Ε͹Α͍ͷͰ͸ͳ͍͔ʁ
೥ࠒʹ.BDSPEPXOͱ͍͏.-‫͠૷࣮ͯ͠ͱޠݴܥ‬ɼ
ͦΕͳΓʹ࢖͑Δ΋ͷʹ͸ͳͬͨ
‫ࡏݦ‬Խͨ͠ऑ఺ɿ
w ϖʔδ਺΍ࢴ໘্ͷ෯ͱ͍ͬͨ૊൛্ͷ֓೦ʹґଘ͢Δॲཧ͸
XSBQQFSଆͰ࣮૷͠ʹ͘͘ɼґવͱͯ͠-59ଆͰͷ࣮૷͕ඞཁ
r ಛʹΫϥεϑΝΠϧͷ࣮૷ͳͲ͸XSBQQFSଆͰ͸౸ఈ‫͍ͳ݁͠׬‬͸ͣ
࠷ॳͷҊɿ‫͖ͭܕ‬ͷXSBQQFSΛͭ͘Δ
XSBQQFS‫͕ޠݴ‬༩͑ʹ͔ͬͨ͘ΓΤϥʔใࠂ͕ෆ਌੾ͩͬͨΓ͢Δ
ཁҼ͸ɼओʹ59ͷ΋ͭૢ࡞తҙຯ࿦ͷෳࡶո‫͋ʹ͞ح‬Δɿ
w ࣈ۟ղੳʹ͍ۙ͜ͱ͸͢Δ͕ɼந৅ߏจ໦ͷ֓೦͸ͳ͍
w ੍‫ޚ‬௲ʢfooʣͷల։͸‫ޙ‬ଓτʔΫϯྻʹର͢ΔύλʔϯϚονϯά
r l‫{ހׅ‬ʜ}͕௼Γ߹͍ύλʔϯʹ߹க͢Δ࠷୹ͷτʔΫϯྻzΛҾ਺ͱΈͳ͢
w ഁյతʹมߋՄೳͳม਺ͷ‫͕ߏػ‬ଟ༻͞ΕΔ
w ࣈ۟ղੳ͸lMB[ZzͰɼલํͰධՁ૬౰ͷॲཧ͕ߦͳΘΕ͍ͯͯ΋
‫ํޙ‬͸·ͩτʔΫϯԽ͞Ε͍ͯͳ͍จࣈྻͰ͋Γɼ
લํͷධՁ݁Ռ͕‫ํޙ‬ͷࣈ۟ղੳํ๏Λมߋ͠͏Δ
w Ҏ্ͷΑ͏ͳෳࡶͳ‫͕ߏػ‬૊൛ॲཧͱີ݁߹Ͱɼආ͚ʹ͍͘
੩తʹಛఆͷੑ࣭Λอূ͢Δͱ͍͏ࢼΈ͸͋·Γ๬Έ͕࣋ͯͳ͍
খ͍͞αϒηοτͰ΋͋·Γ‫͍ڧ‬อূ͸Ͱ͖ͳ͍༷ࢠSEXFH0TUFSNBOO
l59‫ޠݴ‬zͷૢ࡞తҙຯ࿦ͷ֓આ
-
59όοΫΤϯυΛXSBQͨ͠‫ʹͣͤ·ࡁͰޠݴ‬ɼ
ࣗલͰ૊൛ॲཧ·Ͱߦͳ͑Δ‫ॲͱޠݴ‬ཧ‫ܥ‬Λઃ‫ܭ‬ɾ࣮૷͍ͨ͠
ओཁͳཁ݅ɿ
w ຊ࣭తʹ૊൛ॲཧʹؔΘΔΑ͏ͳෳࡶͳࣗಈॲཧ͕Ͱ͖Δ͜ͱ
r ଞਓͷॻ͍ͨࣗಈॲཧͷ࣮૷΋େ͖ͳࢧোͳ͘ಡΜͰվม͠΍͍͢͜ͱ΋‫ؚ‬Ή
w ໌Β͔ͳΤϥʔʹ͍ͭͯ͸੩తʹʢʹ૊൛ॲཧΛ࢝ΊΔΑΓલʹʣ‫ݕ‬஌͠ɼ
ͦͷ‫ݪ‬ҼΛͳΔ΂͘ಛఆ͠΍͍͢‫Ͱܗ‬ใࠂͰ͖Δ͜ͱ
໨తҙࣝ
(*‫ͯ͑׶‬΍΍௅ઓతʹॻ͘ͳΒɿ
w 59-
59͸΋ͪΖΜ҃Δ໘Ͱ͸ૉ੖Β͍͠ιϑτ΢ΣΞ͕ͩɼ
͜Ε͚ͩ‫ޠݴ‬ઃ‫ܭ‬ͷ஌‫͍ͯͬ·ཷ͕ݟ‬Δ‫Ͱࡏݱ‬΋
ѻ͍ʹ͍͘ҙຯ࿦Λ΋ͭ59ʹͣͬͱґଘ͠ଓ͚Δͷ͸
޻ֶతʹ݈શͳঢ়ଶͱ͸‫͍͘ʹ͍ݴ‬ͷͰ͸ͳ͍͔ʁ
r DG൚༻ͷ‫Ͱޠݴػࢉܭ‬͸༷ʑͳ‫ޠݴ‬ઃ‫͕ܭ‬೔໷ఏҊ͞Ε͍ͯΔ
w ೔ʑϓϩάϥϜͷੑ࣭Λ੩తʹอূ͢Δ͜ͱΛͻͨ͢Β೤৺ʹ
ߟ͍͑ͯΔͷʹɼ͍͟࿦จΛॻ͘ࡍͷಓ۩Ͱ͸ͦͷ݁ՌΛ‫ڗ‬डͤͣ
ෆ਌੾ͳΤϥʔ͹͔Γ‫͍ͯݟ‬Δͷ͸ɼࠠ԰ͷന‫Ͱއ‬͸ͳ͍͔ʁ
*)
ऄ଍ɿ΋ͬͱࡶͳ໰୊ҙࣝ
৽͍͠૊൛ॲཧγεςϜ
੒Ռ෺

https://github.com/gfngfn/SATySFi
Static Analysis-based TYpesetting System
for Functional Implementation
ʢ͔ͳΓ‫ڧ‬Ҿͳ͚ͭ͜͡ʣ
ߏจ͕େผͯ͠૚ʹ෼͔Ε͍ͯΔ
ಛ௃

+section{SATySFi;ͷ‫}ྫߘݪ‬
+p{
PPLͰ͸emph{2ճ໨ͷൃද}Ͱ͢ɽ
͓ੈ࿩ʹͳΓ·͢ɽ
}

let-inline ctx emph it =
let ctx =
ctx | set-font
Latin italic-font
in
read-inline ctx it
lϚʔΫΞοϓ૚z lϓϩάϥϜ૚z
• -59෩
• ΠϯϥΠϯ{ʜ}ͱ
ϒϩοΫʜͷ۠ผ͕͋Δ
• 0$BNM෩
lϓϩάϥϜ૚zͰ͸ίϚϯυఆ͕ٛ0$BNM෩ͷ‫͚ॻͰޠݴ‬Δ
w lάϩʔόϧͳঢ়ଶzΛ͋·Γ‫ॲʹͣͤʹؾ‬ཧ͕ॻ͚Δ
r ˞ࢭΉΛಘͣNVUBCMFSFGFSFODFͷ‫ػ‬ೳ͸͋Γɼ࠾൪ͳͲʹ࢖༻
w ‫ܕ‬γεςϜΛ༻͍ͨ੩తͳʢʹ૊൛ॲཧʹઌཱͬͨʣΤϥʔใࠂೳྗ
r ௨ৗͷMFUଟ૬ʴЋఔ౓
w Ϩίʔυ‫ࢉܭ‬0IPSJ3ÉNZ(BTUFS+POFT
w ΦϓγϣϯҾ਺
r ґଘ‫ܕ‬΍ᝲ‫ܕ‬͸ແ͠
r ૊൛ॲཧ΍υΩϡϝϯτॲཧʹؔΘΔଟ਺ͷ‫ج‬ຊ‫ͱܕ‬૊ࠐΈവ਺
w ͜Ε͕ࠓճ঺հ͢Δओͳର৅
ಛ௃
w ։ൃಈ‫ػ‬ɾ໨తҙࣝ
wಈ࡞σϞ
w จࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬
w จॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ
w ߦ෼ׂॲཧͷ࢓૊Έ
w ଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4-
w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ
w ·ͱΊ
໨࣍
ಈ࡞σϞɿਖ਼ৗ‫ܥ‬

ʢσϞө૾ɿhttps://drive.google.com/file/d/
1muaWGgyAGfIYJNyKfKvvAzN8vur1sTG3/view?usp=sharingʣ
ҎԼͷΑ͏ͳʮ͍Ζ͸ՎΛ෯DNͷ࿮Ͱғͬͯ૊Ήʯग़ྗΛ͠Α͏ͱͯ͠
΍Γ͕ͪͳෆద֨ͳίʔυΛॻ͍ͯ͠·ͬͨͱ͖ͷΤϥʔใࠂΛ
-
59ͱ45:4'*Ͱൺֱ
ಈ࡞σϞɿҟৗ‫ܥ‬
-
59ͷ৔߹

ʢσϞө૾ɿhttps://drive.google.com/file/d/
1r14gHwCUxe3DQjoxkGHDWWkwtHWqMwaY/view?usp=sharingʣ
45:4'*ͷ৔߹

ʢσϞө૾ɿhttps://drive.google.com/file/d/
1DyKB0V2xIKz6SMYNGdEWnupPAxXkWCeE/view?usp=sharingʣ
w ։ൃಈ‫ػ‬ɾ໨తҙࣝ
w ಈ࡞σϞ
wจࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬
w จॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ
w ߦ෼ׂॲཧͷ࢓૊Έ
w ଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4-
w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ
w ·ͱΊ
໨࣍
ϑϩϯτΤϯυʢ‫ߏػࠪݕ‬ʣʴόοΫΤϯυʢΠϯλϓϦλʣ
ॲཧ‫ܥ‬ͷߏ੒ͷ໛ࣜਤ

֤ϖʔδͷ಺༰
ϖʔδ෼ׂॲཧ
ߦͷ࿈ͳΓ
ߦ෼ׂॲཧ
“ശ” ͷਫฏͳ࿈ͳΓ
ม‫ث׵‬
PDFग़ྗ‫ߏػ‬
OpenType
ϑΥϯτ
ʢίϚϯυΛ‫ؚ‬Ήʣ
ςΩετ
ධՁ‫ث‬
จॻ
ίϚϯυू
ߏจ
ղੳ‫ث‬
‫ثࠪݕܕ‬
ύοέʔδ‫܈‬
ॲཧ‫ܥ‬ͷߏ੒ͷ໛ࣜਤ
֤ϖʔδͷ಺༰
ϖʔδ෼ׂॲཧ
ߦͷ࿈ͳΓ
ߦ෼ׂॲཧ
“ശ” ͷਫฏͳ࿈ͳΓ
ม‫ث׵‬
PDFग़ྗ‫ߏػ‬
จॻ
ίϚϯυू
OpenType
ϑΥϯτ
ʢίϚϯυΛ‫ؚ‬Ήʣ
ςΩετ
ධՁ‫ث‬
ߏจ
ղੳ‫ث‬
‫ثࠪݕܕ‬
ύοέʔδ‫܈‬
ϑϩϯτΤϯυʢ‫ߏػࠪݕ‬ʣʴόοΫΤϯυʢΠϯλϓϦλʣ
ॲཧ‫ܥ‬ͷߏ੒ͷ໛ࣜਤ

֤ϖʔδͷ಺༰
ϖʔδ෼ׂॲཧ
ߦͷ࿈ͳΓ
ߦ෼ׂॲཧ
“ശ” ͷਫฏͳ࿈ͳΓ
ม‫ث׵‬
PDFग़ྗ‫ߏػ‬
OpenType
ϑΥϯτ
ʢίϚϯυΛ‫ؚ‬Ήʣ
ςΩετ
ධՁ‫ث‬
‫ثࠪݕܕ‬
{The quick brown fox ʜ }
ʜ
ʜ
ʜ
ॲཧ‫ܥ‬ͷߏ੒ͷ໛ࣜਤ

֤ϖʔδͷ಺༰
ϖʔδ෼ׂॲཧ
ߦͷ࿈ͳΓ
ߦ෼ׂॲཧ
“ശ” ͷਫฏͳ࿈ͳΓ
ม‫ث׵‬
PDFग़ྗ‫ߏػ‬
OpenType
ϑΥϯτ
ʢίϚϯυΛ‫ؚ‬Ήʣ
ςΩετ
ධՁ‫ث‬
‫ثࠪݕܕ‬
ࣗಈॲཧͷ࣮૷Ͱ͸
͜ͷ͋ͨΓͷ૊൛ॲཧʹ
հೖͰ͖ͯ΄͍͠
ࣗಈॲཧͷఆ͕ٛ‫ʹࠪݕܕ‬௨Ε͹ɼ
ධՁ࣌ʹ͜͜Ͱ
σʔλͷෆ੔߹͕‫͍ͳ͖ى‬Α͏ͳ
‫ܕ‬γεςϜΛ༻ҙ͍ͨ͠
Ұൠͷ૊൛ॲཧʹԙ͚Δจࣈͷѻ͍ํ
ϕʔεϥΠϯ
ࢀর఺
άϦϑgͷ
ਐߦ෯
࣍ͷࢀর఺
Ξ΢τϥΠϯΛͳ͢
ͭͷ#É[JFS‫ۂ‬ઢ͕
ͭ͘ΔgͷྖҬ
w άϦϑ	glyph
ɿਤ‫ͯ͠ͱܗ‬ͷจࣈΛѻ͏୯Ґ
w άϦϑ͸ϕʔεϥΠϯ	baseline
Λ‫ج‬४ʹͯ͠ฒͿ
w ֤άϦϑ͸ҎԼͷσʔλΛ΋ͭɿ
r Ξ΢τϥΠϯɿࢀর఺	reference point
͔Βͷ૬ର࠲ඪͰ‫ه‬࿥͞Εͨด‫ۂ‬ઢ
r ਐߦ෯	advance width
ɿͦͷจࣈͷ഑ஔʹΑͬͯࢀর఺ΛͲΕ͚ͩਐΊΔ͔
Ұൠͷ૊൛ॲཧʹԙ͚Δจࣈͷѻ͍ํ
ϕʔεϥΠϯ
ࢀর఺
άϦϑgͷ
ਐߦ෯
ߴ͞
ਂ͞
͞ΒʹҎԼͰߴ͞ͱਂ͞Λఆٛ͠ɼ
άϦϑ͸Ծ૝తͳlശzΛ΋ͭͱΈͳ͢
w ߴ͞ɿNBY	
ด‫ۂ‬ઢͷ࠷ߴ౸ୡ࠲ඪ

w ਂ͞ɿNBY	
—	ด‫ۂ‬ઢͷ࠷௿౸ୡ࠲ඪ


˞͜Ε͸ීวతͳఆࣜԽͱ·Ͱ͸‫͕͍ͳ͑ݴ‬ɼ
গͳ͘ͱ΋59ͷ૊൛ॲཧ,OVUIͰ͸
࣮࣭తʹ͜Εʹ૬౰͢Δํ๏Λ࠾͓ͬͯΓɼ
45:4'*Ͱ΋౿ऻ
w άϦϑ	glyph
ɿਤ‫ͯ͠ͱܗ‬ͷจࣈΛѻ͏୯Ґ
w άϦϑ͸ϕʔεϥΠϯ	baseline
Λ‫ج‬४ʹͯ͠ฒͿ
w ֤άϦϑ͸ҎԼͷσʔλΛ΋ͭɿ
r Ξ΢τϥΠϯɿࢀর఺	reference point
͔Βͷ૬ର࠲ඪͰ‫ه‬࿥͞Εͨด‫ۂ‬ઢ
r ਐߦ෯	advance width
ɿͦͷจࣈͷ഑ஔʹΑͬͯࢀর఺ΛͲΕ͚ͩਐΊΔ͔
w άϦϑ	glyph
ɿਤ‫ͯ͠ͱܗ‬ͷจࣈΛѻ͏୯Ґ
w άϦϑ͸ϕʔεϥΠϯ	baseline
Λ‫ج‬४ʹͯ͠ฒͿ
w ֤άϦϑ͸ҎԼͷσʔλΛ΋ͭɿ
r Ξ΢τϥΠϯɿࢀর఺	reference point
͔Βͷ૬ର࠲ඪͰ‫ه‬࿥͞Εͨด‫ۂ‬ઢ
r ਐߦ෯	advance width
ɿͦͷจࣈͷ഑ஔʹΑͬͯࢀর఺ΛͲΕ͚ͩਐΊΔ͔
Ұൠͷ૊൛ॲཧʹԙ͚Δจࣈͷѻ͍ํ

ϕʔεϥΠϯ
จࣈ໨ͷ
ࢀর఺
จࣈ໨ͷ
ࢀর఺
άϦϑgͷ
ਐߦ෯
Ξ΢τϥΠϯͱਐߦ෯͚ͩͰ͸ࢧোΛ͖ͨ͢৔߹΋͋ΔͷͰɼ
ಛผͳ૊Έ߹Θͤʹରͯ͠ͷΈద༻͞ΕΔॲཧ͕͋Δ
w ϑΥϯτϑΝΠϧ಺ʹͦͷͨΊͷσʔλ͕֨ೲ͞Ε͍ͯΔ
૊൛ॲཧʹԙ͚ΔจࣈͷఆࣜԽ

߹ࣈ	ligature
ɿ
૬ੑ͕ѱ͍‫ܗ‬ঢ়ͷάϦϑ͕ฒͿͱ͖͸
߹ମͯ͠άϦϑʹ͢Δ
Χʔχϯά	kerning
ɿ
ਐߦ෯ʹै͏ͱࣈ͕ؒෆࣗવʹͳΔ
૊Έ߹ΘͤͰ͸ௐ੔Λߦͳ͏
࣮ࡍʹ૊·Εͨ߹ࣈɾΧʔχϯάͷྫʢσϞ࠶‫ܝ‬ʣ
άϦϑͷlശz͸ਫฏํ޲ʹฒΜͰlߦzΛͳ͢
w ͜ͷlߦzΛΠϯϥΠϯϘοΫεྻͱ‫Ϳݺ‬
lߦz͸ߦ෼ׂॲཧ	line breaking
ʹΑͬͯ੾Γ෼͚ΒΕͯlஈམzʹͳΔ
w ۭനͳͲ͸ద੾ʹ৳ॖ͠ɼߦ௕͕ἧ͏Α͏ʹ੔‫ܗ‬
w lஈམz΋ԣʹࡉ௕͍lശz͕Ԗ௚ํ޲ʹ࿈ͳͬͨ΋ͷͰɼ
ϒϩοΫϘοΫεྻͱ‫Ϳݺ‬
lശzͷ࿈ͳΓͱͯ͠ͷߦ΍ஈམ

ʜ
ʜ
ʜ
ΠϯϥΠϯํ޲
ϒ
ϩ
ỽ
Ϋ
ํ
޲
ΠϯϥΠϯϘοΫεྻΛϓϩάϥϜͰૢ࡞͢Δର৅ͱͯ͠௥Ճɿ
ૢ࡞ର৅ͱͯ͠ͷϘοΫεྻͷఆࣜԽ

v ::= λx . e | ⋯ | ib
ib ::= [ib]*
ib ::=
| | ⋯ | | ⋯
|
⋮
άϦϑ
ۭന
஋
ΠϯϥΠϯ
ϘοΫεྻ
‫ݸ‬Ҏ্ͷ
༗‫ݸݶ‬ͷྻ
ΠϯϥΠϯϘοΫεྻʹ͸ྻશମͰ ͱ͍͏‫ج‬ຊ‫ܕ‬Λ͚ͭΔɿ
ҎԼͷ૊ࠐΈവ਺Ͱ࿈݁Ͱ͖Δɿ
inlineboxes
Γ ⊢ ib : inlineboxes
(++): inlineboxes → inlineboxes → inlineboxes
ϒϩοΫϘοΫεྻ΋ૢ࡞ର৅ͱͯ͠௥Ճɿ
ૢ࡞ର৅ͱͯ͠ͷϘοΫεྻͷఆࣜԽ

v ::= λx . e | ⋯ | bb
bb ::= [bb]*
஋
ϒϩοΫ
ϘοΫεྻ
‫ݸ‬Ҏ্ͷ༗‫ݸݶ‬ͷྻɼ
௚‫ͯ͠ͱ؍‬͸ॎʹ࿈ͳ͍ͬͯΔ
bb ::=
|
|
⋮
ߦͷ಺༰
ߦؒͷۭന
⋯
ϒϩοΫϘοΫεྻʹ͸ྻશମͰ ͱ͍͏‫ج‬ຊ‫ܕ‬Λ͚ͭΔɿ
΍͸Γ૊ࠐΈവ਺Ͱ࿈݁Ͱ͖Δɿ
blockboxes
Γ ⊢ bb : blockboxes
(+++): blockboxes → blockboxes → blockboxes
ҎԼͷΑ͏ͳ૊ࠐΈവ਺line-breakͱͯ͠
ߦ෼ׂॲཧΛఏ‫ͯ͠ڙ‬Ϣʔβ͕࢖༻Ͱ͖ΔͱΑͦ͞͏ɿ
૊ࠐΈവ਺ʹΑΔߦ෼ׂॲཧͷఏ‫ڙ‬

line-break v1 ⋯ vn ʜ
ʜ
ʜ
⏞
ԿΒ͔ͷઃఆ஋ʢߦ௕ͳͲʣ

line-breakͷ‫ܕ‬͸ҎԼͷ‫ܗ‬ɿ
τ1 → ⋯ → τn → inlineboxes → blockboxes
w άϦϑͷͳ͢lശz͕ਫฏʹฒΜͩ΋ͷɿΠϯϥΠϯϘοΫεྻ 
w ࡉ௕͍lߦͷശz͕ॎʹฒΜͩ΋ͷɿϒϩοΫϘοΫεྻ 
w ‫ج‬ຊ‫ܕ‬ͷ௥Ճɿ
w ߦ෼ׂॲཧ͸ҎԼͷ૊ࠐΈവ਺Ͱఏ‫ڙ‬ɿ
ib
bb
͜͜·Ͱͷ·ͱΊ

τ ::= ⋯ | |
inlineboxes blockboxes
line-break: τ1 → ⋯ → τn → inlineboxes → blockboxes
v ::= ⋯
|
|
w ͷྫɿ
w ͷྫɿ
ib
bb
ʜ
ʜ
ʜ
ib
bb
w ։ൃಈ‫ػ‬ɾ໨తҙࣝ
w ಈ࡞σϞ
wจࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬
wจॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ
w ߦ෼ׂॲཧͷ࢓૊Έ
w ଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4-
w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ
w ·ͱΊ
໨࣍
͜͜·ͰͰϘοΫεྻͷॲཧํ๏ͷେ࿮͸ఆࣜԽͰ͖͕ͨɼ
౰વͳ͕ΒΤϯυϢʔβ͕άϦϑΛ௚઀༩͑ͨΓ͸͠ͳ͍ͷͰɼ
ԿΒ͔ͷϚʔΫΞοϓ͕ࢪ͞ΕͨςΩετ‫ࣜܗ‬ͷ‫͔ߘݪ‬Β
ϘοΫεྻ΁ͱม‫࠷ͯ͠׵‬ऴతʹจॻΛ૊ΊΔΑ͏ͳ࢓૊Έ͕ඞཁ
ͲΜͳ‫هͰࣜܗ‬ड़͢Δ‫͢ʹޠݴ‬Δ͔ʁ
໨తҙ͔ࣝΒͯ͠ҎԼΛຬ͍ͨͯ͠Δ͜ͱ͕؊ཁɿ
w ԿΒ͔ͷํ๏Ͱ੩తʹଥ౰ੑΛ‫͖Ͱࠪݕ‬Δ
w Ϣʔβࣗ਎͕ϚʔΫΞοϓʹ࢖͏ίϚϯυΛ৽‫ʹن‬ఆٛͰ͖Δ
จॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ
9.-ʹ͍ۙཁྖͰɼ‫ߘݪ‬Λ%5ʢ୅਺తσʔλ‫ܕ‬ʣͰѻ͏ʁ
ΫϥεϑΝΠϧ͕%5Λఆٛ͢Δ͜ͱͰϚʔΫΞοϓํ๏Λ‫ن‬ఆ͢Δͱɼ
ΫϥεϑΝΠϧΛ࢖͏ΤϯυϢʔβଆͰ͸ϚʔΫΞοϓͷఆٛΛ֦ு͠ʹ͍͘
w ͍ΘΏΔYQSFTTJPOQSPCMFN
w 0QFOEBUBUZQFT-ÖI)JO[F͕͋Ε͹֦ுͰ͖Δ͕ɼ
σʔλΛ࢖͏ଆͷവ਺ͷෳࡶԽ͕ґવආ͚ʹ͍͘
r 0$BNMͰ͍͏type += of 
YQSFTTJPOQSPCMFNͱແԑʹͳΔΑ͏ͳఆࣜԽ͸Ͱ͖ͳ͍͔ʁ
͍ΘΏΔ5BHMFTTpOBMతͳఆࣜԽΛ͢ΔͱΑͦ͞͏
t C τ
%5Ͱ‫ߘݪ‬Λ‫ه‬ड़͢Δʹ͸໰୊͋Γ
‫ߘݪ‬ͷྫʢ࠶‫ܝ‬ʣɿ
‫ݱ‬ঢ়ͷ‫هߘݪ‬ड़ํ๏

+section{SATySFi;ͷ‫}ྫߘݪ‬
+p{
PPLͰ͸emph{2ճ໨ͷൃද}Ͱ͢ɽ
͓ੈ࿩ʹͳΓ·͢ɽ
}

w {ʜ}ɿΠϯϥΠϯςΩετ
w ʜɿϒϩοΫςΩετ
w fooɿΠϯϥΠϯίϚϯυ
r ΠϯϥΠϯςΩετதͷϚʔΫΞοϓ
w +fooɿϒϩοΫίϚϯυ
r ϒϩοΫςΩετதͷϚʔΫΞοϓ
ΠϯϥΠϯςΩετ{ }ͷ‫ࣜܗ‬ɿ
it
it ::= [it]*
it ::= char
| [e]*
จࣈʢʹ6OJDPEFίʔυϙΠϯτʣ
ίϚϯυద༻
foo
·ͣɼίϚϯυద༻͕ͳ͘จࣈྻ͚ͩͷ৔߹ͷม‫׵‬͸؆୯ɿ
‫ݱ‬ঢ়ͷ‫ॲߘݪ‬ཧํ๏ͷఆࣜԽ

{The quick brown fox jumps ʜ }
ʜ
ม‫ʹ׵‬ඞཁͳ෇Ճ৘ใ
w ϑΥϯτϑΝϛϦʔ
w จࣈαΠζ
w จࣈ৭
w ⋮
෇Ճ৘ใ͸ͦΕΒΛશ෦ूΊͨϨίʔυͷΑ͏ͳ஋ͱͯ͠
ϓϩάϥϜ্Ͱѻ͏͜ͱʹ͠ɼ͜ͷ஋ΛςΩετॲཧจ຺ͱ‫Ϳݺ‬
ςΩετॲཧจ຺ͷఆࣜԽ

τ ::= ⋯ | context Γ ⊢ Ctx : context
҆қʹߋ৽Ͱ͖ͯ΄͘͠ͳ͍಺༰΋͋ΔͷͰɼ
ϨίʔυͰ͋Δ͜ͱ͸Ϣʔβ͔Β͸‫ͣ͑ݟ‬ɼ
֤߲໨ͷlHFUUFSzͱlTFUUFSz͕૊ࠐΈവ਺ͱͯ͠ఆٛ͞Ε͍ͯΔɿ
w get-font-size 
r ֨ೲ͞Ε͍ͯΔจࣈαΠζΛऔΓग़͢
w set-font-size 
r ( | set-font-size )ͰจࣈαΠζΛ ʹߋ৽ͨ͠ Λฦ͢
: context → length
: length → context → context
Ctx ℓ ℓ Ctx
v ::= ⋯ | Ctx
Ctx ::= {fontsize = ℓ, …}
௕͞ఆ਺ʢྫɿ12ptʣ
௕͞ͷ‫ܕ‬
ҎԼͷΑ͏ͳ૊ࠐΈവ਺read-inlineͱͯ͠ఏ‫ڙ‬ɿ
ϘοΫεྻ΁ͷม‫׵‬ͷ૊ࠐΈവ਺

read-inline {The quick brown fox jumpsʜ}
Ctx
ʜ

‫ܕ‬͸read-inline: context → inlinetext → inlineboxes
ΠϯϥΠϯςΩετʹͭ͘‫ج‬ຊ‫ܕ‬
ίϚϯυΛద੾ʹఆٛ͢Ε͹ҎԼͷཁྖͰม‫͖Ͱ׵‬ΔΑ͏ʹ͍ͨ͠ɿ
ίϚϯυద༻Λ‫ؚ‬Ή৔߹ʹҰൠԽ

read-inline {The emph{quick brown} foxʜ}
Ctx
 ʜ
{The emph{quick brown} fox ʜ }
͜ͷద༻ͷ෦෼ΛʮςΩετॲཧจ຺Λड͚औΔͱ
ΠϯϥΠϯϘοΫεྻʹͳΔ΋ͷʯͱଊ͑Δ
emph{quick brown} ͱΈͳͤΔ
: context → inlineboxes
emph ͱΈͳͤΔ
: inlinetext → context → inlineboxes
emph ͸ҎԼͷΑ͏ʹఆٛͰ͖ͦ͏ɿ
: inlinetext → context → inlineboxes
ίϚϯυఆٛ

let emph (it : inline-text) (ctx : context) =
let ctx = ctx | set-italic-font in
read-inline ctx it
ϑΥϯτΛΠλϦοΫମʹߋ৽͢Δɼ ‫ܕ‬ͷิॿവ਺
context → context
let-inline ctx emph it =
let ctx = ctx | set-italic-font in
read-inline ctx it
࣮ࡍͷ45:4'*Ͱ͸ҎԼͰemphΛఆٛ͢Δɿ
ςΩετॲཧจ຺Λड͚औΔม਺͕
ߏจ্Ͱखલʹདྷ͚ͨͩ
ίϚϯυద༻ͷධՁͷΠϝʔδ

read-inline {The emph{quick brown} foxʜ}
Ctx
 ʜ
ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ
The emph{quick brown} foxʜ
Ctx
ίϚϯυద༻ͷධՁͷΠϝʔδ

read-inline {The emph{quick brown} foxʜ}
Ctx
 ʜ
ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ
emph{quick brown} foxʜ
Ctx
ίϚϯυద༻ͷධՁͷΠϝʔδ

read-inline {The emph{quick brown} foxʜ}
Ctx
 ʜ
ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ
emph{quick brown} foxʜ
Ctx
let-inline ctx emph it =
let ctx = ctx | set-italic-font in
read-inline ctx it
ίϚϯυద༻ͷධՁͷΠϝʔδ
read-inline {The emph{quick brown} foxʜ}
Ctx
 ʜ
ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ
emph{quick brown} foxʜ
Ctx
let-inline ctx emph it =
let ctx = ctx | set-italic-font in
read-inline ctx it
ͷϑΥϯτΛΠλϦοΫʹߋ৽ͨ͠จ຺ ͕ͭ͘ΒΕɼ
ೖΕࢠͰread-inline {quick brown}͕ධՁ͞ΕΔ
Ctx Ctx′
Ctx′
ίϚϯυద༻ͷධՁͷΠϝʔδ

read-inline {The emph{quick brown} foxʜ}
Ctx
 ʜ
ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ
emph{quick brown} foxʜ
Ctx
quick brown
Ctx′
ίϚϯυద༻ͷධՁͷΠϝʔδ

read-inline {The emph{quick brown} foxʜ}
Ctx
 ʜ
ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ
emph{quick brown} foxʜ
Ctx
brown
Ctx′
ίϚϯυద༻ͷධՁͷΠϝʔδ

read-inline {The emph{quick brown} foxʜ}
Ctx
 ʜ
ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ
emph{quick brown} foxʜ
Ctx
Ctx′
foxʜ
ίϚϯυద༻ͷධՁͷΠϝʔδ
read-inline {The emph{quick brown} foxʜ}
Ctx
 ʜ
ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ
Ctx
໭Γ஋͕ίϚϯυద༻ͷ͋ͬͨՕॴʹૠೖ͞ΕΔ
foxʜ
ίϚϯυద༻ͷධՁͷΠϝʔδ

read-inline {The emph{quick brown} foxʜ}
Ctx
 ʜ
ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ
Ctx
ʜ
ίϚϯυద༻ͷධՁͷΠϝʔδ

read-inline {The emph{quick brown} foxʜ}
Ctx
 ʜ
ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ
Ctx
emph͸࣮ࡍͷ45:4'*Ͱ͸ ‫͚͕ͭܕ‬ΒΕΔ
w લड़ͷ௨Γҙຯ࿦తʹ͸ ‫ܕ‬ͷവ਺
[inlinetext] inlinecmd
inlinetext → context → inlineboxes
ίϚϯυͷ‫ܕ‬

let-inline ctx emph it =
let ctx = ctx | set-italic-font in
read-inline ctx it
ΑΓҰൠʹɼ ‫ܕ‬ͷҾ਺ΛͱΔ Ҿ਺ͷίϚϯυ͸
‫͚͕ͭܕ‬ΒΕΔ
w ҙຯ࿦తʹ͸ ‫ܕ‬ͷവ਺
w ͜ͷ‫ʹ͚ͭܕ‬ΑΓɼ‫ߘݪ‬Λॻ͘ࡍ͸ςΩετॲཧจ຺Λҙࣝ͢Δඞཁ͕ͳ͘ͳΔ
τ1, …, τn n
[τ1; …; τn] inlinecmd
τ1 → ⋯ → τn → context → inlineboxes
ϒϩοΫίϚϯυ΋ಉ༷ʹ ‫ܕ‬ͷ
വ਺ͱΈͳͤͯɼ ‫ܕ‬Λ͚ͭͯѻ͏
ஈམΛ૊ΉίϚϯυ+p͸ҎԼͷ‫Ͱܗ‬ఆٛͰ͖ɼ ‫ܕ‬
τ1 → ⋯ → τn → context → blockboxes
[τ1; …; τn] blockcmd
[inlinetext] blockcmd
ϒϩοΫςΩετͷ৔߹

let-block ctx +p it = ʜ
ʢ+pͷ࣮૷ํ๏͸࣍અͰ‫ޙ‬ड़ʣ
ϒϩοΫςΩετ ͷཁૉ͸ίϚϯυద༻ͷΈɿ
bt
bt ::= [bt]* bt ::= [e]*
+foo
read-block: context → blocktext → blockboxes
w ΠϯϥΠϯςΩετɼϒϩοΫςΩετɼςΩετॲཧจ຺Λ௥Ճɿ
w ૊ࠐΈവ਺
r line-break 
r read-inline 
r read-block 
r ςΩετॲཧจ຺ͷHFUUFSͱTFUUFS
w get-font-size
: τ1 → ⋯ → τn → inlinetext → inlineboxes
: context → inlinetext → inlineboxes
: context → inlinetext → inlineboxes
: context → length
͜͜·Ͱͷ·ͱΊ

τ ::= ⋯ | inlineboxes | blockboxes | |
| | | |
inlinetext blocktext
context [[τ]*] inlinecmd [[τ]*] blockcmd
length
v ::= ⋯ | ib | bb | | |
 
bt
{ }
it Ctx
it ::= [it]* it ::= char | [e]*
bt ::= [bt]* bt ::= [e]*
foo
+foo
͜͜·Ͱͷ·ͱΊ

ΠϯϥΠϯ ϒϩοΫ
Ϙ
ỽ
Ϋ
ε
ྻ
ς
Ω
ε
τ
 +p{
The quick
brown fox ʜ
} 
ʜ
ʜ
ʜ
{The quick brown fox jumps ʜ }
read-inline read-block
line-break
w ։ൃಈ‫ػ‬ɾ໨తҙࣝ
w ಈ࡞σϞ
wจࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬
wจॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ
wߦ෼ׂॲཧͷ࢓૊Έ
w ଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4-
w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ
w ·ͱΊ
໨࣍
࣮ࡍͷߦ෼ׂॲཧͷ૊ࠐΈവ਺
line-break b1 b2 Ctx ʜ
ʜ
ʜ

line-break 
w ɼ ɿͭͷਅِ஋
r ߦ෼ׂॲཧࣗମͱؔΘΔઃఆ஋Ͱ͸ͳ͍ͷͰࠓճ͸৮Εͳ͍
w ɿςΩετॲཧจ຺
r ߦ௕ͳͲɼߦ෼ׂॲཧʹඞཁͳઃఆ஋͸͔͜͜ΒऔΓग़ͯ͠࢖͏
: bool → bool → context → inlineboxes → blockboxes
b1 b2
Ctx
45:4'*ͷߦ෼ׂॲཧͰ͸ɼ59ͷͨΊʹఏҊ͞Εͨ
,OVUIr1MBTTΞϧΰϦζϜ,OVUI1MBTTͷఆࣜԽΛ౿ऻ
w ଟগͷಠ֦ࣗு͋Γ
ߦ෼ׂॲཧͷ࢓૊Έ

ߦ෼ׂॲཧ໰୊
w ೖྗɿΠϯϥΠϯϘοΫεྻ ɼॴ๬ͷߦ௕ 
r ଞͷύϥϝʔλ͸ᘭ຤ͳͷͰࠓճ͸ࣺ৅͢Δ
w ग़ྗɿ ΛۭനΛద੾ʹ৳ॖ͢ΔͳͲ֤ͯ͠ߦͷ௕͕͞ ʹͳΔΑ͏ʹ
੾Γ෼͚ͯͰ͖ΔϒϩοΫϘοΫεྻͷ͏ͪ࠷΋‫ݟ‬ө͑ͷྑ͍΋ͷ
r ‫ݟ‬ө͑ͷྑ͞͸ԿΒ͔ͷධՁํ๏Ͱద੾ʹఆٛ͢Δඞཁ͋Γ
ib ℓ
ib ℓ
˞lલ͔Βॱʹ٧Ί͍͖ͯɼᷓΕͨΒͦ͜Ͱߦ෼ׂzͱ͍͏ᩦཉ๏Ͱ͸
Ұൠʹ͸࠷ྑͷ݁Ռʹ͸ͳΒͳ͍
ߦ෼ׂॲཧ໰୊ΛॏΈ͖ͭ༗޲ඇ८ճάϥϑ্ͷ࠷୹‫ܦ‬࿏໰୊ʹ‫ؼ‬ண͢Δ
಺༰ ͱߦ௕ࢦఆ ͔Β Λߏ੒
w ௖఺ू߹ 
r ໛ࣜਤɿ
w ลʢ ಺Ͱ ͸ ΑΓ΋खલͷ఺ʣ
r l Ͱߦ෼ׂͯͦ͠ͷ࣍ʹ Ͱߦ෼ׂͨ͠ͱ͖ɼ ͱ ͷؒͷ಺༰Λ
௕͕͞ ʹͳΔΑ͏ʹߦͱͯ͠૊Ήͱɼͦͷ‫ݟ‬ө͑ͷධՁ͸ z
w ͸େ͖͍΄Ͳ‫ݟ‬ө͕͑ѱ͍͜ͱΛද͢ϖφϧςΟ஋ʢܾఆํ๏͸࣍ทͰઆ໌ʣ
ͷʮઌ಄ʯ͔Βʮ຤ඌʯ΁ࢸΔ࠷୹‫ܦ‬࿏Λ‫ٻ‬ΊΔͱɼͦΕ͕௨Δ֤௖఺͕
ϖφϧςΟ૯࿨Λ࠷খԽ͢Δʢʹ࠷΋‫ݟ‬ө͑ͷྑ͘ͳΔʣ੾Γ෼͚Օॴ
ib ℓ G = (V, E; d)
V := ( ib தͷߦ෼ׂՄೳͳՕॴશମ ) ⊎ {ઌ಄, ຤ඌ}
ib v v′
v v′ v v′
ℓ p
p
G
,OVUIr1MBTTΞϧΰϦζϜ

v v′
p
ʜ
v1 v2 v3 v4 v5
ઌ಄ ຤ඌ
,OVUI
1MBTT
ߦ෼ׂީิՕॴ ͱͦͷ࣍ͷީิՕॴ ΛܾΊͨΒɼۭനΛ৳ॖͯ͠
ͱ ͷؒͷ಺༰͕௕͞ ʹͳΔΑ͏ʹ͠ɼͦͷ‫ݟ‬ө͑ΛධՁ
v v′
v v′ ℓ
ߦͷ‫ݟ‬ө͑ͷධՁํ๏

ℓ
v v′
‫ݟ‬ө͑ධՁͷͨΊʹɼۭന͸
	ࣗવ௕
৳ͼΔ‫ڐ‬༰ྔ
ॖΉ‫ڐ‬༰ྔ

ͱ͍͏ͭͷύϥϝʔλΛ͍࣋ͬͯΔ
w όωͷΑ͏ͳΠϝʔδ
w ࣗવ௕ʹ͍ۙ΄Ͳ‫ݟ‬ө͕͑ྑ͍
͜ͱΛද͢ɼԼʹತͳධՁവ਺Λ΋ͭ ࣗ
વ
௕
࠷΋
ृѱ
࠷ྑ
ϖ
φ
ϧ
ς
ỹ
஋
࠷
୹
࠷
௕
,OVUI1MBTT
࣮ࡍͷߦ෼ׂՄೳՕॴ͸୯‫ؒޠ‬ͷۭന͚ͩͱ͸‫ݶ‬Βͣɼ
΋͏গ͠ҰൠԽ͞Εͨ࢓૊Έʹͳ͍ͬͯΔ

ҰൠԽ͞Εͨߦ෼ׂՄೳՕॴͷࢦఆํ๏
ib ::= [ib]*
{
ib0
ib1 / ib2}
p
l͜͜Ͱߦ෼ׂ͢Δ͔͠ͳ͍͔બ΂Δɽ
ߦ෼ׂ͠ͳ͍ͳΒ ͱ౳ՁͰ͋Γɼ
Ұํ͜͜Ͱߦ෼ׂ͢ΔͳΒखલͷߦ຤ʹ Λɼ
‫ํޙ‬ͷߦ಄ʹ ΛͦΕͧΕ݁߹͠ɼ͔ͭ
෼ׂͦͷ΋ͷʹΑΓϖφϧςΟ ͕ੜ͡Δz
ib0
ib1
ib2
p
ɿ
{ε / ε}
100
୯‫ؒޠ‬ͷۭന͸ͱද‫͞ݱ‬ΕΔ
ib ::= | ⋯ | | ⋯
|
|
{
ib
ib / ib}
p
άϦϑ
৳ॖ͢Δۭന
EJTDSFUJPOBSZCSFBL
⋮
 ɿۭྻ
ε
EJTDSFUJPOBSZCSFBLͷ࢓૊ΈʹΑΓ༷ʑͳߦ෼ׂํ๏͕ද‫͖Ͱݱ‬Δɿ
w ϋΠϑωʔγϣϯʹΑΔ୯‫ޠ‬தͰͷߦ෼ׂɿ
r ୯‫ޠ‬தͷҰ෦Օॴ͸ߦ෼ׂͯ͠Α͘ɼ෼ׂ࣌͸खલͷߦ຤ʹϋΠϑϯ͕ೖΔ
w ྫɿlUBCMFz͸lUBCMFzͱ෼ׂͯ͠Α͍ͷͰ্ਤͷΑ͏ʹѻ͏
w ӳ‫ͱͩޠ‬෼ׂͯ͠Α͍Օॴ͸୯‫͍ͯͬ·ܾʹͱ͝ޠ‬Δ͕ɼ۪௚ʹදҾ͖ͤͣͱ΋
-JBOHr,OVUIΞϧΰϦζϜ-JBOHͱ͍͏ਪఆํ๏͕࢖͑Δ
r ϋΠϑωʔγϣϯ͸୯‫Ͱؒޠ‬ͷ෼ׂΑΓ΋޷·͘͠ͳ͍ͱ͍͏͜ͱΛ൓ө͠ɼ
ϖφϧςΟΛߴΊʹઃఆ
r ࣮ࡍ͸୯‫ޠ‬தͰ෼ׂ͢Δ͔͠ͳ͍͔Ͱ߹ࣈʹ͢Δ͔΍Χʔχϯά͢Δ͔͕
มΘΓ͏ΔͷͰ΋͏গ͠ෳࡶͳ࢓૊Έ
%JTDSFUJPOBSZCSFBLʹΑΔछʑͷߦ෼ׂͷද‫ݱ‬

{
ε
/ ε}
1000
w ࿨จ૊൛
r ҎԼͷΑ͏ͳ‫ن‬ଇʹ͓͓Αͦ४‫ڌ‬
w ʰ೔ຊ‫ޠ‬૊൛ॲཧͷཁ݅ʱɼ௨শ+-SFR8$೔ຊ‫ޠ‬૊൛λεΫϑΥʔε
w 6OJDPEF-JOF#SFBLJOHMHPSJUIN6OJDPEF$POTPSUJVN
r େ఍ͷจࣈؒ͸ߦ෼ׂͯ͠Α͍
w ‫ݪ‬ଇͱ֤ͯ͠จࣈؒʹࣗવ௕ͷۭനΛ΋ͭEJTDSFUJPOBSZCSFBL͕ೖΔ
r ͨͩ͠ɼߦ಄ߦ຤‫ې‬ଇ͸͋Δ
w ߦ಄ෆՄͷจࣈɿด͡‫ހׅ‬ɼ۟ಡ఺ɼʮΌʯɼʮʔʯͳͲ
w ߦ຤ෆՄͷจࣈɿ։͖‫Ͳͳހׅ‬
%JTDSFUJPOBSZCSFBLʹΑΔछʑͷߦ෼ׂͷද‫ݱ‬

{ε / ε}
100
{ε / ε}
100
{ε / ε}
100
{ε / ε}
100
{ε / ε}
100
r ߦ಄ͷ։͖‫ހׅ‬ͷ௚લ΍ɼߦ຤ͷด͡‫ހׅ‬΍۟ಡ఺ͷ௚‫ޙ‬͸ɼ
ߦதͱ͸ҟͳΓೋ෼ΞΩʢʹ͍ΘΏΔ൒֯෯ͷۭനʣΛೖΕͳ͍
w ֘౰Օॴ͸ࣗવ௕͕ೋ෼ΞΩͷۭനΛ΋ͭEJTDSFUJPOBSZCSFBLʹͳΔ
%JTDSFUJPOBSZCSFBLʹΑΔछʑͷߦ෼ׂͷද‫ݱ‬

{ε / ε}
100
{ε / ε}
100
{ε / ε}
100
{ε / ε}
100
{ε / ε}
100
ߦ෼ׂॲཧͷར༻ྫ

ஈམΛ૊ΉίϚϯυ+p ͸
૊ࠐΈവ਺line-breakΛ༻͍࣮ͯ૷ɿ
ଞͷ૊ࠐΈവ਺ɿ
w inline-skip 
r ࢦఆͨ͠௕͞ͷ৳ॖͰ͖ͳ͍ۭനΛฦ͢
r ͜͜Ͱ͸ஈམ๯಄ͷࣈԼ͛ʹ࢖༻
w inline-fil 
r ࣗવ௕͕Ͱɼ͔ͭϖφϧςΟͳ͘Ͳ͜·Ͱ΋৳ͼΒΕΔಛघͳۭന
r ͜͜Ͱ͸ʮஈམ࠷ऴߦ͸ߦ຤·Ͱ౸ୡ͠ͳͯ͘Α͍ʯ͜ͱͷ࣮‫༻࢖ʹݱ‬
: [inlinetext] blockcmd
: length → inlineboxes
: inlineboxes
let-block ctx +p it =
let ib = read-inline ctx it in
let indent = inline-skip (get-font-size ctx) in
line-break true true ctx (indent ++ ib ++ inline-fil)
ʜ
indent
inline-fil
ib
w ։ൃಈ‫ػ‬ɾ໨తҙࣝ
w ಈ࡞σϞ
wจࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬
wจॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ
wߦ෼ׂॲཧͷ࢓૊Έ
wଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4-
w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ
w ·ͱΊ
໨࣍
w ੩తʹ‫Ͱ͔͓͕͛ͭ͘ܕ‬ਝ଎Ͱଟ͘ͷ৔߹਌੾ͳΤϥʔใࠂ͕ߦͳΘΕɼ
҃Δఔ౓࢖͍΍͍͢΋ͷʹͳͬͨ
r ͱΓΘ͚ύοέʔδͷ࣮૷ʹ͸ͳ͔ͳ͔ҖྗΛൃ‫ش‬
w 59-
59ͱ45:4'*྆ํͰ೤৺ʹύοέʔδΛॻ͔ΕΔํʹ
ʢ59ͱൺ΂ͯʣ
ʮϓϩάϥϛϯά‫ͯ͠ͱޠݴ‬͸໌Β͔ʹָʯͱ͍͏‫ײ‬૝Λ໯͑ͨ
w ҰํͰɼ‫͚ͭܕ‬ͷ౎߹্Ͳ͏ͯ͠΋‫ߘݪ‬ͷ‫ه‬ड़͕൥ࡶʹͳͬͯ͠·͏
৔໘͕ग़ͯ͘Δ
r ಛʹจॻ࡞੒ͷ༻్Ͱ͸ʢ൚༻ͷ‫ޠݴػࢉܭ‬Ҏ্ʹʣ
ෳࡶͳσʔλ΋؆ܿʹ‫ه‬ड़Ͱ͖Δ͜ͱΛ๬·Ε͕ͪ
จॻ‫ه‬ड़্ͷߋͳΔ໰୊ҙࣝ
‫಺ޠݴ‬%4-ͷಋೖ
w จࣈྻΛड͚औͬͯߏจղੳ͢ΔΑ͏ʹίϚϯυΛఆٛ͢Δ
w ؆୯ͳྫɿ͋Έͩ͘͡ͷ‫ه‬ड़ΛΞεΩʔΞʔτͰͰ͖ΔΑ͏ʹ͢Δ
‫ه‬ड़ෳࡶԽʹର͢ΔφΠʔϰͳճආࡦ

amidakuji(```
|X|-|=|/| |
| |-||-|X|
|=|X|-||=|
|-||-|=|-|
|X|=|-|| |
```);
amidakuji([
[Cross; Line; ʜ ];
[Empty; Line; ʜ ];
[Double; Cross; ʜ ];
ʜ
]);
௨
ৗ
ͷ
࣮
૷
̙
̨
̡
ํ
ࣜ
%4-ͷղऍ͸ಈతʹʢʹ૊൛ॲཧ։࢝‫ʹޙ‬ʣߦͳΘΕΔͨΊɼ
Τϥʔ͕͋ͬͨ৔߹ʹൃ‫͕ݟ‬஗͍
w %4-Λ࢖͚ͬͨͩͰಈతʹΤϥʔ͕ग़Δੈքʹ‫ٯ‬໭Γ
%4-ͷղऍ͸૊൛ॲཧʹґଘ͢Δ͜ͱͳ͘ՄೳͳͷͰɼ
‫ޠݴ‬ຊମʹϚΫϩ‫ߏػ‬Λಋೖͯ͠લॲཧͰ͖ΔΑ͏ʹ͢Ε͹Α͍
͔҆͠͠қʹϚΫϩ‫ߏػ‬ΛೖΕΔͱࠓ౓͸Τϥʔ͕ෆ਌੾ʹͳΓ΍͍͢ͷͰɼ
Ͱ͖Δ͚ͩ‫ݪ‬ҼͷΘ͔Γ΍͍͢Τϥʔ͕ग़Δ࢓૊Έʹ͍ͨ͠
ଟஈ֊‫	ࢉܭ‬multi-stage programming
ʹ‫ͮ͘ج‬ϚΫϩ‫ߏػ‬Λಋೖ͠Α͏
φΠʔϰͳճආࡦͷ໰୊఺ͱͦͷղܾࡦ
w ಈతʹίʔυΛੜ੒ͯ͠ߋʹͦΕΛ࣮ߦ͢ΔΑ͏ͳ‫ߏػ‬Λඋ͑ͨɼ
‫͕ࢉܭ‬ෳ਺ͷεςʔδ	stage
͔ΒͳΔମ‫ܥ‬
ʴͦͷΑ͏ͳૢ࡞Λ҆શʹߦͳ͏ͨΊͷ‫ܕ‬γεςϜ
w ྫɿ.FUB.-5BIB4IFBSEɼЕ˓%BWJFTɼ
.FUB0$BNM,JTFMZPWɼଞଟ਺
w ಛʹεςʔδͷ৔߹ɿ
w ৄࡉ͸໌೔ʂɿ
ଟஈ֊‫ͱࢉܭ‬͸

ୈεςʔδʢʹlલॲཧzʣ
ୈεςʔδʢʹl௨ৗͷධՁzʣ
εςʔδͷ.FUB.-5BIB4IFBSEΛϕʔεʹͨ͠
.BDSP.-(BO[
4BCSZ5BIBʹ͍ۙϚΫϩ‫ߏػ‬ͷఆࣜԽΛ࠾༻
w ϚΫϩͷ࢖༻ྫɿ
r ~(ʜ)͸ϚΫϩల։தʹ࢖ΘΕΔୈεςʔδͷ஋ͷҾ਺
r ~ͳ͠ͷҾ਺͸ల։‫ޙ‬ͷίʔυͷҰ෦ͱͳΔ
w ϚΫϩͷఆٛࣗମ͕ల։ΑΓલʹ‫ࠪ͞ݕܕ‬Εɼ‫͚͕ͭܕ‬͹
ల։݁Ռ͸ඞͣXFMMUZQFE
w య‫ܕ‬తʹ͸ϚΫϩల։ʢʹίʔυੜ੒ʣ͸ҰॠͰऴΘΔͷͰɼ
ϚΫϩల։தʹQBOJD͢Ε͹lࣄ্࣮੩తʹzΤϥʔ͕ใࠂ͞ΕΔ
ϚΫϩ‫ߏػ‬ͷ‫ޠݴ‬ઃ‫ܭ‬

repeat@~(3){foo{A}}
% ௨ৗͷධՁ͕࢝·ΔλΠϛϯάͰ͸ɼ࠷ॳ͔Β
% foo{A}foo{A}foo{A} ͱॻ͍ͯ͋ͬͨͷͱಉ͡ѻ͍ʹͳΔ
‫ࠪݕܕ‬ ϚΫϩల։
௨ৗͷධՁ
ୈεςʔδͷҾ਺ͱͯ͠%4-Λ‫ه‬ड़͢Δɿ
w ϚΫϩల։࣌ʹ%4-Λॲཧ͠ɼߏจΤϥʔ͕͋Ε͹QBOJD͢Δ
r Τϥʔ͸lࣄ্࣮੩తʹzʹग़Δ
r %4-ίʔυதͷͲ͕͜‫ݪ‬ҼͰΤϥʔ͕‫͔͖ͨى‬ΛϚΫϩ಺͔Β
Θ͔Γ΍͘͢ใࠂͰ͖ΔΑ͏ʹɼઌ಄Ґஔ͕ͲͷϑΝΠϧͷԿߦ໨͔
ࣗಈͰิΘΕΔจࣈྻϦςϥϧ@`ʜ`Λ࢖͏
w ਖ਼ৗʹల։͞Εͨ৔߹ɼ݁ՌͷςΩετ͸ධՁ࣌ʹ௨ৗͲ͓Γॲཧ
ϚΫϩ‫ʹߏػ‬ΑΔ%4-ॲཧ

amidakuji@~(@```
|X|-|=|/| |
| |-||-|X|
|=|X|-||=|
|-||-|=|-|
|X|=|-|| |
```);
amidakuji([
[Cross; Line; ʜ ];
[Empty; Line; ʜ ];
[Double; Cross; ʜ ];
ʜ
]);
ల։
ϚΫϩ‫ߏػ‬ͷಈ࡞σϞɿਖ਼ৗ‫ܥ‬

ʢσϞө૾ɿhttps://drive.google.com/file/d/
1l9HeT6Hn_lNn0ptVobVDYwW6T9A8xKvZ/view?usp=sharingʣ
ϚΫϩ‫ߏػ‬ͷಈ࡞σϞɿҟৗ‫ܥ‬

ʢσϞө૾ɿhttps://drive.google.com/file/d/
1pbTOSWiflEkTghS3TzlerG5NCcb2iIoI/view?usp=sharingʣ
w ։ൃಈ‫ػ‬ɾ໨తҙࣝ
w ಈ࡞σϞ
wจࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬
wจॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ
wߦ෼ׂॲཧͷ࢓૊Έ
wଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4-
w༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ
w ·ͱΊ
໨࣍
͋Γ͕͍ͨ͜ͱʹ༗ࢤͷํʑʹΑͬͯ
छʑͷपลπʔϧ΍ύοέʔδͷ։ൃ͕ਐߦத
• 45:4'*༻ύοέʔδϚωʔδϟ4BUZSPHSBQIPT4BLBNPUP
– github.com/na4zagin3/satyrographos
– 0$BNMͷύοέʔδϚωʔδϟͰ͋Δ01.ͱซ༻͢Δઃ‫ܭ‬
– ϑΥϯτ΍ઃఆϑΝΠϧ΋؅ཧՄೳ
• ొ࿥͞Ε͍ͯΔύοέʔδҰཡ͕‫ݟ‬ΒΕΔϖʔδ.BUTVOBHB
– satyrographos-packages.netlify.app
– ‫ࡏݱ‬໿ 50 ύοέʔδ
• TBUZTGJCBTF/JTIJXBLJ
.VSBTF,BOFLP
– github.com/nyuichi/satysfi-base
– ඪ४ϥΠϒϥϦͷେ෯֦ॆ
– ύʔαίϯϏωʔλͳͲ΋༻ҙ͞Ε͍ͯΔ
༗ࢤͷํʑʹΑΔπʔϧɾύοέʔδ
• FBTZUBCMFmonaqa github.com/monaqa/satysfi-easytable
– ද૊ΈΛ؆ܿʹ࣮‫͢ݱ‬ΔͨΊͷύοέʔδ
• NBUSJYDECF github.com/abenori/satysfi-matrixcd
– -
59ͷUJL[DEͷΑ͏ʹՄ‫׵‬ਤࣜΛඳͨ͘Ίͷύοέʔδ
• NBLFMBUFY,BOFLP github.com/puripuri2100/SATySFi-make-latex
– ςΩετग़ྗϞʔυʹΑΓɼ45:4'*ιʔεΛ-
59ιʔεʹม‫ͯ͠׵‬
ग़ྗ͢ΔͨΊͷύοέʔδ
• ‫ޠݴ‬ଆͰѻ͑ͳ͍͜ͱʹΑΓ਺ࣜ͸ະରԠ
• 4UFBNFS*TIJJɼ4-Z%*'Jmonaqa
– github.com/konn/satysfi-steamer
– github.com/monaqa/slydifi
– ͍ͣΕ΋εϥΠυ࡞੒༻ͷΫϥεϑΝΠϧ
ଞʹ΋਺ଟ͘ͷπʔϧ΍ύοέʔδ͕ެ։͞Ε͍ͯ·͢
༗ࢤͷํʑʹΑΔπʔϧɾύοέʔδ
એ఻

#൑ϖʔδ
ແঈެ։தɿ
https://booth.pm/
ja/items/1127224
satysfi book ‫ࡧݕ‬
ҎԼͷํʑʹਂ͘‫ँײ‬ਃ্͛͠·͢ɿ
w ։ൃΛࢧԉ௖͍ͨօ༷
r ೥౓*1ະ౿*5ਓࡐൃ۷ɾҭ੒ࣄ‫ۀ‬
r ‫ࣜג‬ձࣾυϫϯΰʢΞϧόΠτͱͯ͠ʣ
r 5IF45:4'*CPPLΛ͝ߪೖ௖͍ͨօ༷
w ೤৺ʹ1VMM3FRVFTU΍ॿ‫ݴ‬ΛԼͬͨ͞։ൃऀͷօ༷
r %BJLJ.BUTVOBHB	matsud224
͞Μɼ%BJDIJ0PIBTIJ	leque
͞Μɼ
/PSJBLJ4BLBNPUP	na4zagin3
͞Μɼ5BLVNB*TIJLBXB	nekketsuuu
͞Μɼ
elpinal͞Μɼ.BTBLJ)BSB	qnighy
͞Μɼsakas--͞Μɼଞଟ਺໊
w ύοέʔδɾपลπʔϧ։ൃऀͷօ༷
w 45:4'*4MBDLɾ45:4'*$POG౳ɼίϛϡχςΟΛӡӦͯ͠Լ͞Δօ༷
r /BPLJ,BOFLP	puripuri2100
͞Μɼmonaqa͞Μɼଞଟ਺໊
ँࣙ
w ։ൃಈ‫ػ‬ɾ໨తҙࣝ
w ಈ࡞σϞ
wจࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬
wจॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ
wߦ෼ׂॲཧͷ࢓૊Έ
wଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4-
w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ
w·ͱΊ
໨࣍
വ਺‫ܕ‬ͷ‫ޠݴ‬ઃ‫ܭ‬Λϕʔεͱ͢Δɼ
੩త‫͖ͭܕ‬ͷ૊൛ॲཧγεςϜ45:4'*ʹ͍ͭͯ঺հ͠·ͨ͠
w ҙຯ࿦্ͷओͳಛ௃ɿ
r ϘοΫεྻʹΑΔάϦϑͳͲͷऔΓѻ͍
r ςΩετͱจ຺ΛϘοΫεྻʹม‫͢׵‬Δവ਺ͱͯ͠ͷίϚϯυ
r छʑͷ૊ࠐΈവ਺Ͱ੍‫͖Ͱޚ‬Δߦ෼ׂॲཧ
r ‫಺ޠݴ‬%4-Λ࢖༻ͯ͠΋ΤϥʔใࠂΛਝ଎͔ͭ໌շʹอͭͨΊͷɼ
ଟஈ֊‫ͮ͘جʹࢉܭ‬ϚΫϩ‫ߏػ‬
w ͋Γ͕͍ͨ͜ͱʹ༗ࢤͷํʑʹΑΓपลπʔϧ΍ύοέʔδ΋
ਫ਼ྗతʹ։ൃ͞Ε͍ͯΔ
·ͱΊ
• Rowan Davies. A temporal-logic approach to binding-time analysis. In Proc. of LICS’96, pp. 184–195, 1996.
• Sebastian Erdweg and Klaus Ostermann. Featherweight TeX and parser correctness. In SLE 2010. LNCS,
vol. 6563, pp. 397–416, 2011.
• Steve Ganz, Amr Sabry, and Walid Taha. Macros as multi-stage computations: type-safe, generative,
binding macros in MacroML. In Proc. of ICFP’01, pages 74–85, 2001.
• Benedict Gaster and Mark Jones. A polymorphic type system for extensible records and variants, 1996.
• Oleg Kiselyov. The design and implementation of BER MetaOCaml. In Functional and Logic Programming.
FLOPS 2014. Lecture Notes in Computer Science, vol 8475, 2014.
• Donald Knuth and Michael Plass. Breaking paragraphs into lines. So︎ftware–Practice and Experience, 11,
pages 1119–1184, 1981.
• Franklin Liang. Word Hy-phen-a-tion by Com-put-er. Ph. D. thesis, Stanford University, 1983.
• Andres Löh and Ralf Hinze. Open data types and open functions. In Proc. of PPDP’06, pp. 133–144, 2006.
• Atsushi Ohori. A polymorphic record calculus and its compilation. In ACM Transactions on Programming
Languages and Systems, 17(6), pages 844–895, 1995.
• Didier Rémy. Type inference for records in a natural extension of ML. Theoretical Aspects of Object-
Oriented Programming. Types, Semantics and Language Design, pages 67–95, 1993.
• Walid Taha and Tim Sheard. Multi-stage programming with explicit annotations. Theoretical Computer
Science, 248 (1-2), pp. 211–242, 2000.
• Unicode Consortium. Unicode Standard Annex #14: Unicode Line Breaki︎ng Algorithm (Unicode 10.0.0).
http://unicode.org/reports/tr14/, 2017.
• W3C ೔ຊ‫ޠ‬૊൛λεΫϑΥʔεʰW3C ٕज़ϊʔτ ೔ຊ‫ޠ‬૊൛ॲཧͷཁ݅ʱ౦‫ػిژ‬େֶग़൛‫ہ‬, 2012.
ࢀߟจ‫ݙ‬

More Related Content

What's hot (20)

深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
Yahoo!デベロッパーネットワーク
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
 
Visual Studio CodeでRを使う
Visual Studio CodeでRを使うVisual Studio CodeでRを使う
Visual Studio CodeでRを使う
Atsushi Hayakawa
 
Counterfaual Machine Learning(CFML)のサーベイ
Counterfaual Machine Learning(CFML)のサーベイCounterfaual Machine Learning(CFML)のサーベイ
Counterfaual Machine Learning(CFML)のサーベイ
ARISE analytics
 
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
 
2019年度チュートリアルBPE
2019年度チュートリアルBPE2019年度チュートリアルBPE
2019年度チュートリアルBPE
広樹 本間
 
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
Life Robotics
 
双対性
双対性双対性
双対性
Yoichi Iwata
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
Hiroshi Yamashita
 
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
Deep Learning JP
 
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
Deep Learning JP
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
Takami Sato
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
Shota Imai
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
hoxo_m
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
 
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
Yahoo!デベロッパーネットワーク
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
 
Visual Studio CodeでRを使う
Visual Studio CodeでRを使うVisual Studio CodeでRを使う
Visual Studio CodeでRを使う
Atsushi Hayakawa
 
Counterfaual Machine Learning(CFML)のサーベイ
Counterfaual Machine Learning(CFML)のサーベイCounterfaual Machine Learning(CFML)のサーベイ
Counterfaual Machine Learning(CFML)のサーベイ
ARISE analytics
 
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
 
2019年度チュートリアルBPE
2019年度チュートリアルBPE2019年度チュートリアルBPE
2019年度チュートリアルBPE
広樹 本間
 
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
Life Robotics
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
Hiroshi Yamashita
 
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
Deep Learning JP
 
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
Deep Learning JP
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
Takami Sato
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
Shota Imai
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
hoxo_m
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
 

More from T. Suwa (7)

静的型つき組版処理システムSATySFi: その後の発展と今後の課題 @第62回プログラミング・シンポジウム
静的型つき組版処理システムSATySFi: その後の発展と今後の課題 @第62回プログラミング・シンポジウム静的型つき組版処理システムSATySFi: その後の発展と今後の課題 @第62回プログラミング・シンポジウム
静的型つき組版処理システムSATySFi: その後の発展と今後の課題 @第62回プログラミング・シンポジウム
T. Suwa
 
SATySFiのこれからの課題たち
SATySFiのこれからの課題たちSATySFiのこれからの課題たち
SATySFiのこれからの課題たち
T. Suwa
 
静的型つき組版処理システムSATySFi @第61回プログラミング・シンポジウム
静的型つき組版処理システムSATySFi @第61回プログラミング・シンポジウム静的型つき組版処理システムSATySFi @第61回プログラミング・シンポジウム
静的型つき組版処理システムSATySFi @第61回プログラミング・シンポジウム
T. Suwa
 
ラベルなしオプション引数の型システムと型推論
ラベルなしオプション引数の型システムと型推論ラベルなしオプション引数の型システムと型推論
ラベルなしオプション引数の型システムと型推論
T. Suwa
 
レコード計算の多相型システムと型推論
レコード計算の多相型システムと型推論レコード計算の多相型システムと型推論
レコード計算の多相型システムと型推論
T. Suwa
 
Macrodown -MLが使えるML-
Macrodown -MLが使えるML-Macrodown -MLが使えるML-
Macrodown -MLが使えるML-
T. Suwa
 
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
T. Suwa
 
静的型つき組版処理システムSATySFi: その後の発展と今後の課題 @第62回プログラミング・シンポジウム
静的型つき組版処理システムSATySFi: その後の発展と今後の課題 @第62回プログラミング・シンポジウム静的型つき組版処理システムSATySFi: その後の発展と今後の課題 @第62回プログラミング・シンポジウム
静的型つき組版処理システムSATySFi: その後の発展と今後の課題 @第62回プログラミング・シンポジウム
T. Suwa
 
SATySFiのこれからの課題たち
SATySFiのこれからの課題たちSATySFiのこれからの課題たち
SATySFiのこれからの課題たち
T. Suwa
 
静的型つき組版処理システムSATySFi @第61回プログラミング・シンポジウム
静的型つき組版処理システムSATySFi @第61回プログラミング・シンポジウム静的型つき組版処理システムSATySFi @第61回プログラミング・シンポジウム
静的型つき組版処理システムSATySFi @第61回プログラミング・シンポジウム
T. Suwa
 
ラベルなしオプション引数の型システムと型推論
ラベルなしオプション引数の型システムと型推論ラベルなしオプション引数の型システムと型推論
ラベルなしオプション引数の型システムと型推論
T. Suwa
 
レコード計算の多相型システムと型推論
レコード計算の多相型システムと型推論レコード計算の多相型システムと型推論
レコード計算の多相型システムと型推論
T. Suwa
 
Macrodown -MLが使えるML-
Macrodown -MLが使えるML-Macrodown -MLが使えるML-
Macrodown -MLが使えるML-
T. Suwa
 
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
T. Suwa
 

Recently uploaded (20)

Cyber security cyber security cyber security cyber security cyber security cy...
Cyber security cyber security cyber security cyber security cyber security cy...Cyber security cyber security cyber security cyber security cyber security cy...
Cyber security cyber security cyber security cyber security cyber security cy...
pranavbodhak
 
Splunk Leadership Forum Wien - 20.05.2025
Splunk Leadership Forum Wien - 20.05.2025Splunk Leadership Forum Wien - 20.05.2025
Splunk Leadership Forum Wien - 20.05.2025
Splunk
 
TrustArc Webinar: Mastering Privacy Contracting
TrustArc Webinar: Mastering Privacy ContractingTrustArc Webinar: Mastering Privacy Contracting
TrustArc Webinar: Mastering Privacy Contracting
TrustArc
 
New Ways to Reduce Database Costs with ScyllaDB
New Ways to Reduce Database Costs with ScyllaDBNew Ways to Reduce Database Costs with ScyllaDB
New Ways to Reduce Database Costs with ScyllaDB
ScyllaDB
 
Droidal: AI Agents Revolutionizing Healthcare
Droidal: AI Agents Revolutionizing HealthcareDroidal: AI Agents Revolutionizing Healthcare
Droidal: AI Agents Revolutionizing Healthcare
Droidal LLC
 
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025
Nikki Chapple
 
European Accessibility Act & Integrated Accessibility Testing
European Accessibility Act & Integrated Accessibility TestingEuropean Accessibility Act & Integrated Accessibility Testing
European Accessibility Act & Integrated Accessibility Testing
Julia Undeutsch
 
SDG 9000 Series: Unleashing multigigabit everywhere
SDG 9000 Series: Unleashing multigigabit everywhereSDG 9000 Series: Unleashing multigigabit everywhere
SDG 9000 Series: Unleashing multigigabit everywhere
Adtran
 
Security Operations and the Defense Analyst - Splunk Certificate
Security Operations and the Defense Analyst - Splunk CertificateSecurity Operations and the Defense Analyst - Splunk Certificate
Security Operations and the Defense Analyst - Splunk Certificate
VICTOR MAESTRE RAMIREZ
 
UiPath Community Zurich: Release Management and Build Pipelines
UiPath Community Zurich: Release Management and Build PipelinesUiPath Community Zurich: Release Management and Build Pipelines
UiPath Community Zurich: Release Management and Build Pipelines
UiPathCommunity
 
Dev Dives: System-to-system integration with UiPath API Workflows
Dev Dives: System-to-system integration with UiPath API WorkflowsDev Dives: System-to-system integration with UiPath API Workflows
Dev Dives: System-to-system integration with UiPath API Workflows
UiPathCommunity
 
The 2025 Digital Adoption Blueprint.pptx
The 2025 Digital Adoption Blueprint.pptxThe 2025 Digital Adoption Blueprint.pptx
The 2025 Digital Adoption Blueprint.pptx
aptyai
 
Master tester AI toolbox - Kari Kakkonen at Testaus ja AI 2025 Professio
Master tester AI toolbox - Kari Kakkonen at Testaus ja AI 2025 ProfessioMaster tester AI toolbox - Kari Kakkonen at Testaus ja AI 2025 Professio
Master tester AI toolbox - Kari Kakkonen at Testaus ja AI 2025 Professio
Kari Kakkonen
 
Measuring Microsoft 365 Copilot and Gen AI Success
Measuring Microsoft 365 Copilot and Gen AI SuccessMeasuring Microsoft 365 Copilot and Gen AI Success
Measuring Microsoft 365 Copilot and Gen AI Success
Nikki Chapple
 
Evaluation Challenges in Using Generative AI for Science & Technical Content
Evaluation Challenges in Using Generative AI for Science & Technical ContentEvaluation Challenges in Using Generative AI for Science & Technical Content
Evaluation Challenges in Using Generative AI for Science & Technical Content
Paul Groth
 
Let’s Get Slack Certified! 🚀- Slack Community
Let’s Get Slack Certified! 🚀- Slack CommunityLet’s Get Slack Certified! 🚀- Slack Community
Let’s Get Slack Certified! 🚀- Slack Community
SanjeetMishra29
 
Create Your First AI Agent with UiPath Agent Builder
Create Your First AI Agent with UiPath Agent BuilderCreate Your First AI Agent with UiPath Agent Builder
Create Your First AI Agent with UiPath Agent Builder
DianaGray10
 
Multistream in SIP and NoSIP @ OpenSIPS Summit 2025
Multistream in SIP and NoSIP @ OpenSIPS Summit 2025Multistream in SIP and NoSIP @ OpenSIPS Summit 2025
Multistream in SIP and NoSIP @ OpenSIPS Summit 2025
Lorenzo Miniero
 
Gihbli AI and Geo sitution |use/misuse of Ai Technology
Gihbli AI and Geo sitution |use/misuse of Ai TechnologyGihbli AI and Geo sitution |use/misuse of Ai Technology
Gihbli AI and Geo sitution |use/misuse of Ai Technology
zainkhurram1111
 
Introducing FME Realize: A New Era of Spatial Computing and AR
Introducing FME Realize: A New Era of Spatial Computing and ARIntroducing FME Realize: A New Era of Spatial Computing and AR
Introducing FME Realize: A New Era of Spatial Computing and AR
Safe Software
 
Cyber security cyber security cyber security cyber security cyber security cy...
Cyber security cyber security cyber security cyber security cyber security cy...Cyber security cyber security cyber security cyber security cyber security cy...
Cyber security cyber security cyber security cyber security cyber security cy...
pranavbodhak
 
Splunk Leadership Forum Wien - 20.05.2025
Splunk Leadership Forum Wien - 20.05.2025Splunk Leadership Forum Wien - 20.05.2025
Splunk Leadership Forum Wien - 20.05.2025
Splunk
 
TrustArc Webinar: Mastering Privacy Contracting
TrustArc Webinar: Mastering Privacy ContractingTrustArc Webinar: Mastering Privacy Contracting
TrustArc Webinar: Mastering Privacy Contracting
TrustArc
 
New Ways to Reduce Database Costs with ScyllaDB
New Ways to Reduce Database Costs with ScyllaDBNew Ways to Reduce Database Costs with ScyllaDB
New Ways to Reduce Database Costs with ScyllaDB
ScyllaDB
 
Droidal: AI Agents Revolutionizing Healthcare
Droidal: AI Agents Revolutionizing HealthcareDroidal: AI Agents Revolutionizing Healthcare
Droidal: AI Agents Revolutionizing Healthcare
Droidal LLC
 
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025
Nikki Chapple
 
European Accessibility Act & Integrated Accessibility Testing
European Accessibility Act & Integrated Accessibility TestingEuropean Accessibility Act & Integrated Accessibility Testing
European Accessibility Act & Integrated Accessibility Testing
Julia Undeutsch
 
SDG 9000 Series: Unleashing multigigabit everywhere
SDG 9000 Series: Unleashing multigigabit everywhereSDG 9000 Series: Unleashing multigigabit everywhere
SDG 9000 Series: Unleashing multigigabit everywhere
Adtran
 
Security Operations and the Defense Analyst - Splunk Certificate
Security Operations and the Defense Analyst - Splunk CertificateSecurity Operations and the Defense Analyst - Splunk Certificate
Security Operations and the Defense Analyst - Splunk Certificate
VICTOR MAESTRE RAMIREZ
 
UiPath Community Zurich: Release Management and Build Pipelines
UiPath Community Zurich: Release Management and Build PipelinesUiPath Community Zurich: Release Management and Build Pipelines
UiPath Community Zurich: Release Management and Build Pipelines
UiPathCommunity
 
Dev Dives: System-to-system integration with UiPath API Workflows
Dev Dives: System-to-system integration with UiPath API WorkflowsDev Dives: System-to-system integration with UiPath API Workflows
Dev Dives: System-to-system integration with UiPath API Workflows
UiPathCommunity
 
The 2025 Digital Adoption Blueprint.pptx
The 2025 Digital Adoption Blueprint.pptxThe 2025 Digital Adoption Blueprint.pptx
The 2025 Digital Adoption Blueprint.pptx
aptyai
 
Master tester AI toolbox - Kari Kakkonen at Testaus ja AI 2025 Professio
Master tester AI toolbox - Kari Kakkonen at Testaus ja AI 2025 ProfessioMaster tester AI toolbox - Kari Kakkonen at Testaus ja AI 2025 Professio
Master tester AI toolbox - Kari Kakkonen at Testaus ja AI 2025 Professio
Kari Kakkonen
 
Measuring Microsoft 365 Copilot and Gen AI Success
Measuring Microsoft 365 Copilot and Gen AI SuccessMeasuring Microsoft 365 Copilot and Gen AI Success
Measuring Microsoft 365 Copilot and Gen AI Success
Nikki Chapple
 
Evaluation Challenges in Using Generative AI for Science & Technical Content
Evaluation Challenges in Using Generative AI for Science & Technical ContentEvaluation Challenges in Using Generative AI for Science & Technical Content
Evaluation Challenges in Using Generative AI for Science & Technical Content
Paul Groth
 
Let’s Get Slack Certified! 🚀- Slack Community
Let’s Get Slack Certified! 🚀- Slack CommunityLet’s Get Slack Certified! 🚀- Slack Community
Let’s Get Slack Certified! 🚀- Slack Community
SanjeetMishra29
 
Create Your First AI Agent with UiPath Agent Builder
Create Your First AI Agent with UiPath Agent BuilderCreate Your First AI Agent with UiPath Agent Builder
Create Your First AI Agent with UiPath Agent Builder
DianaGray10
 
Multistream in SIP and NoSIP @ OpenSIPS Summit 2025
Multistream in SIP and NoSIP @ OpenSIPS Summit 2025Multistream in SIP and NoSIP @ OpenSIPS Summit 2025
Multistream in SIP and NoSIP @ OpenSIPS Summit 2025
Lorenzo Miniero
 
Gihbli AI and Geo sitution |use/misuse of Ai Technology
Gihbli AI and Geo sitution |use/misuse of Ai TechnologyGihbli AI and Geo sitution |use/misuse of Ai Technology
Gihbli AI and Geo sitution |use/misuse of Ai Technology
zainkhurram1111
 
Introducing FME Realize: A New Era of Spatial Computing and AR
Introducing FME Realize: A New Era of Spatial Computing and ARIntroducing FME Realize: A New Era of Spatial Computing and AR
Introducing FME Realize: A New Era of Spatial Computing and AR
Safe Software
 

PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介