SlideShare a Scribd company logo
1 of 84
Download to read offline
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

組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
Kouhei Sutou
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
 

What's hot (20)

分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 

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

1998 ACURA INTEGRA Service Repair Manual
1998 ACURA INTEGRA Service Repair Manual1998 ACURA INTEGRA Service Repair Manual
1998 ACURA INTEGRA Service Repair Manual
jksemndmm
 
11th rep of ese.cmdy .banu
11th rep of ese.cmdy .banu11th rep of ese.cmdy .banu
11th rep of ese.cmdy .banu
ahsanrabbani
 

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

Demystifying Unicode - Longhorn PHP 2021
Demystifying Unicode - Longhorn PHP 2021Demystifying Unicode - Longhorn PHP 2021
Demystifying Unicode - Longhorn PHP 2021
 
1998 ACURA INTEGRA Service Repair Manual
1998 ACURA INTEGRA Service Repair Manual1998 ACURA INTEGRA Service Repair Manual
1998 ACURA INTEGRA Service Repair Manual
 
11th rep of ese.cmdy .banu
11th rep of ese.cmdy .banu11th rep of ese.cmdy .banu
11th rep of ese.cmdy .banu
 
モダンAngularJS @ GDG中国2014.12.6
モダンAngularJS @ GDG中国2014.12.6モダンAngularJS @ GDG中国2014.12.6
モダンAngularJS @ GDG中国2014.12.6
 
PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!
 
表現学習時代の生成語彙論ことはじめ
表現学習時代の生成語彙論ことはじめ表現学習時代の生成語彙論ことはじめ
表現学習時代の生成語彙論ことはじめ
 
C program language tutorial pattern printing
C program language tutorial pattern printingC program language tutorial pattern printing
C program language tutorial pattern printing
 
08_0648_EA.pdf
08_0648_EA.pdf08_0648_EA.pdf
08_0648_EA.pdf
 
Amazon ECS를 통한 Docker 콘테이너의 지속적 배포(CD) 방법
Amazon ECS를 통한 Docker 콘테이너의 지속적 배포(CD) 방법Amazon ECS를 통한 Docker 콘테이너의 지속적 배포(CD) 방법
Amazon ECS를 통한 Docker 콘테이너의 지속적 배포(CD) 방법
 
Hebrew Bible as Data: Laboratory, Sharing, Lessons
Hebrew Bible as Data: Laboratory, Sharing, LessonsHebrew Bible as Data: Laboratory, Sharing, Lessons
Hebrew Bible as Data: Laboratory, Sharing, Lessons
 
Vim your Python, Python your Vim
Vim your Python, Python your VimVim your Python, Python your Vim
Vim your Python, Python your Vim
 
Out with Regex, In with Tokens
Out with Regex, In with TokensOut with Regex, In with Tokens
Out with Regex, In with Tokens
 
Writing Readable Code with Pipes
Writing Readable Code with PipesWriting Readable Code with Pipes
Writing Readable Code with Pipes
 
Avinash Kuma1
Avinash Kuma1Avinash Kuma1
Avinash Kuma1
 

More from T. Suwa

More from T. Suwa (7)

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

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
FIDO Alliance
 

Recently uploaded (20)

Introduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxIntroduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptx
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Modernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using BallerinaModernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using Ballerina
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and Insight
 
Less Is More: Utilizing Ballerina to Architect a Cloud Data Platform
Less Is More: Utilizing Ballerina to Architect a Cloud Data PlatformLess Is More: Utilizing Ballerina to Architect a Cloud Data Platform
Less Is More: Utilizing Ballerina to Architect a Cloud Data Platform
 
AI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by AnitarajAI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by Anitaraj
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Quantum Leap in Next-Generation Computing
Quantum Leap in Next-Generation ComputingQuantum Leap in Next-Generation Computing
Quantum Leap in Next-Generation Computing
 
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....
TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....
TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
How to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cfHow to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cf
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
 
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 

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