ç§ã¯ç°¡åãªè³ªåããããŸããïŒ äœ¿çšã¯äœã§ããïŒ ååã®èšäºã§ãç§ã¯ããã«çããããšãã誰ããLispãç¹ã«ã©ã±ãããåŠã³ããçç±ãèŠçŽããŸããã
ã©ã±ããã®åå¿è ãšããŠç§ã«ãšã£ãŠæã䟡å€ã®ãã9ã€ã®èšèªæ©èœã®ãªã¹ãããŸãšããŸããã ããšãã°ãæ©èœçªå·5ã¯ãæ°ããããã°ã©ãã³ã°èšèªã®äœæãã§ãã ãã®ã¡ãœããã¯ã èšèªæåããã°ã©ãã³ã° ããŸãã¯JOPãšãåŒã°ããŸã ã
ãã以æ¥ãIOPã¯ç§ã®å€§å¥œããªRacketã®éšåã«ãªããROPãã¯ããã¯ãšRacketããŒã«ã«ã€ããŠèª¬æããŠãããªã³ã©ã€ã³ããã¯Beautiful Racketã§è³è³ãå ±æããŸããã
ç§ã®ä»äºã®äžäŸã¯è±ç²ã§ãã ãã®ããã°ã©ãã³ã°èšèªã¯ããªã³ã©ã€ã³ããã¯ã®æŽ»çå°å·ã®ããã«äœæããŸããã è±ç²ã§ã¯ãåã®æ®µèœã¯æ¬¡ã®ããã«ããã°ã©ã ãããŠããŸãã
#lang pollen âlink["https://beautifulracket.com/appendix/why-racket-why-lisp.html#so-really-whats-in-it-for-me-now"]{ }, Racket. , â 5 â « ». âem{- }, âem{}.
ãã1ã€ã®äŸã¯ããœãŒã¹ã³ãŒããšããŠBNFææ³ã䜿çšããããŒãµãŒãžã§ãã¬ãŒã¿ãŒïŒ
lex/yacc
ã¹ã¿ã€ã«ïŒã§ããbragã§ãã bfèšèªã®ç°¡åãªäŸïŒ
#lang brag bf-program : (bf-op | bf-loop)* bf-op : ">" | "<" | "+" | "-" | "." | "," bf-loop : "[" (bf-op | bf-loop)* "]"
ã©ã¡ãã®èšèªãRacketã«å®è£ ãããŠãããéåžžã®Racketã€ã³ã¿ãŒããªã¿ãŒãŸãã¯Racket IDEïŒDrRacketãšåŒã°ããïŒå ã§å®è¡ã§ããŸãã
äž»ãªåé¡
ãããŠããã§ã...ãã®æ¬ã¯äœå人ãã®äººã ã«ã©ã±ããã®æ¢çŽ¢ãéå§ããããšããäºå®ã«ãããããããç§ããã€ãŠæ¹å€ããLispãã¡ã³ãšåãçŽ æ©ãèžã¿å°ã«è¶³ãèžã¿å ¥ããŠããããã«æããŸãã
NOPããšãŠãã¯ãŒã«ãªãããªãæ¬ãèªãã®ã«æ°æ¥è²»ããã®ã§ãããã ããã ã èŠåŽããã«ãã¹ãŠãç°¡åã«èª¬æã§ããŸãã 2ã€ã®ç°¡åãªè³ªåã«çããå¿ èŠããããŸãã
- èšèªããã°ã©ãã³ã°ã«æé©ãªåé¡ã¯äœã§ããïŒ
- ã©ã±ãããèšèªã®äœæã«æé©ãªã®ã¯ãªãã§ããïŒ
2çªç®ã®è³ªåã¯ç°¡åã§ãã æåã¯ãããã§ãã ç§ã¯åœŒã«äœåºŠãå°ããããŸããã ããã¿ãŒã¹ãã¥ã¯ãŒãå€äºã®æåãªãã¬ãŒãºãããåŒçšããŸãããèŠãã°ãããã§ãããã çãã¯æ¬åœã«èå³ããã人ã«ã¯ååã§ãã ããããåŸ æ©ããŠããŠå®è³ªçãªè°è«ãèããã人ã®ããã§ã¯ãããŸããã
ã ãããç§ã¯ããããšããŸãã ç§ã¯ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã®ææã§ã¯ãªããããã°ã©ãã³ã°èšèªã®çè«ã«ã€ããŠè©±ãããšã¯ã§ããªãããšã«æ³šæããŠãã ããã ããããç§ã¯å®çšçãªç®çã®ããã«ã©ã±ãããšãã¡ã€ã³åºæèšèªïŒDSLïŒã䜿çšããŠããŸããç§ã®æ¯æ¥ã®ä»äºã¯ãããã«äŸåããŠããŸãã ãããã£ãŠãç§ã¯å®çšçãªåŽé¢ã«çŠç¹ãåœãŠãŸãã
çãçã
- JOPã¯å®éã«ã¯ã€ã³ã¿ãŒãã§ãŒã¹èšèšæ¹æ³ã§ãã æ倧粟床ãç¶æããªããã æå°éã®è¡šèšãå¿
èŠãšããã¿ã¹ã¯ã«æé©ã§ãã æå°è¡šèšãšã¯ãèš±å¯ãããå¯äžã®è¡šèšãæå³ããŸãã ãã以äžã æ倧粟床ãã€ãŸããã®è¡šèšã®æå³ã¯ããŸãã«ããªãã®èšãããšã§ãã ãããŸããããã¿ãŒã³ã¯ãããŸããã IOPã¯ä»ã«é¡ãèŠãªãã»ã©ãã€ã³ããç²åŸããŸãã
ïŒå ¥é¢æ£è ã¯ãNOPã®æ©æµãåããç¹å®ã®ã«ããŽãªã®ã¿ã¹ã¯ã«é²ãããšãã§ããŸã ïŒã
- ã©ã±ããã¯ãã¯ãã·ã¹ãã ã®ãããOOPã«æé©ã§ãã ã³ã³ãã€ã©ãŒã¹ã¿ã€ã«ã§åäœããã³ãŒãå€æãç°¡çŽ åããŸãã ã©ã±ãããã¯ãã·ã¹ãã ã¯ä»ã®ã©ã®ã·ã¹ãã ãããåªããŠããŸãã
ãã®æç¹ã§ãèšäºã®èªè ã®åæ°ã¯ãç§ã®è«æãæ¹å€ããå¿åã®ã³ã¡ã³ããå ¬éããããšæãã§ãããã ããããå¿ã«çããŠãããŠãã ããïŒãããã«ããŠããç§ã¯åã£ãã JOPãšRacketã«ãããããã°ã©ãã³ã°ã®çç£æ§ãéåžžã«åäžããŸããã ããªãããããã®å©ç¹ã掻çšã§ããããã«ããã®ç¥èãå ±æã§ããããšãå¬ããæããŸãã ãããããããã®ããŒã«ãç§ã®ç§å¯ã®æŠåšã®ãŸãŸã§ãããªãã°ãç§ãåãã§ããã§ãããã ãã®å Žåãç§ã¯æãçç£æ§ã®é«ãããã°ã©ããŒã®0.01ïŒ ã«ãšã©ãŸããæ®ãã®99.9ïŒ ãããå°è±¡çã§æçãªçµæãåŸãŸã
ãããã£ãŠãéžæã¯ããªã次第ã§ãã
é·ãçã
æãéèŠãªè³ªåã«ã€ããŠèãããšããããã¯1ã€ã®ã¡ã¿è³ªåã«åž°çããŸãïŒæ žå µåšã®å©ç¹ã説æããã®ã¯ãªãé£ããã®ã§ããïŒ
ããããã èšèªã«ã€ããŠè©±ããšããçšèªã«ã¯ãèšèªãšã¯äœãããããäœãããã®ãã«ã€ããŠã®æåŸ ã蟌ããããŠããŸãã ç§ãã¡ã¯ãã®ãã©ãã€ã ã®äžã«ããŸãããããã°ã©ãã³ã°èšèªã®äŸ¡å€ãç解ããããšã¯å°é£ã§ãã
ããããèŠæš¡ãçž®å°ããèšèªã人éãšã³ã³ãã¥ãŒã¿ãŒã®ã€ã³ã¿ãŒãã§ã€ã¹ã®ããåºãã«ããŽãªã®äžéšãšèŠãªããšãNOPã®ç¹å®ã®å©ç¹ãç解ãããããªããŸãã ãã£ãŠã¿ãŸãããã
äžè¬çãªèšèªãšãã¡ã€ã³åºæã®èšèª
ãŸããå°ãçšèªã説æããŸãã èšèªæåããã°ã©ãã³ã°ïŒOOPãšãåŒã°ããŸãïŒã¯ãæ°ããèšèªãäœæãããã®äžã§ããã°ã©ã ãäœæããããšã«ãããããã°ã©ãã³ã°ã®åé¡ã解決ããã¢ã€ãã¢ã§ãã å€ãã®å Žåããã®ãããªãå°ããªèšèªãã¯ãã¡ã€ã³åºæèšèªïŒDSLïŒãšåŒã°ããŸãã
ååã瀺ãããã«ããµããžã§ã¯ãæåèšèªã¯ç¹å®ã®åéã®ã¿ã¹ã¯ã«é©åããŠããŸãã ããšãã°ãPostScriptãSQLã
make
ãæ£èŠè¡šçŸã
.htaccess
ããã³HTMLã¯ããµããžã§ã¯ãæåèšèªãšèŠãªãããŸãã 圌ãã¯ãã¹ãŠãããããšããŠããããã§ã¯ãããŸããã ãããã圌ãã¯äžã€ã®ããšãããŸãããããšã«éäžããŠããŸãã
ã¹ãã¯ãã«ã®ããäžæ¹ã®ç«¯ã«ã¯ã æ±çšèšèªããããŸãã ããã§ã¯ãCãPascalãPerlãJavaãPythonãRubyãRacketãªã©ã衚瀺ãããŸãããªããããã¯ãµããžã§ã¯ãæåãšèŠãªãããªãã®ã§ããïŒ ãªããªãã圌ãã¯åºç¯å²ã®ã³ã³ãã¥ãŒãã£ã³ã°ã¿ã¹ã¯ã«èº«ã眮ãããã§ãã
å®éã«ã¯ãæ±çšèšèªã¯ç¹å®ã®åéã«ç¹åããŠããŸãã ããšãã°ãCã¯ä»ã®ã·ã¹ãã ããã°ã©ãã³ã°ãããåªããŠããŸãã Perl-ã·ã¹ãã 管çã®ã¹ã¯ãªããçšã Pythonã¯åå¿è åãã®èšèªãšããŠéç«ã£ãŠããŸãã èšèªæåããã°ã©ãã³ã°çšã®ã©ã±ããã ãããã®å Žåããããã¯èšèªãå ã èšèšããããã®ã§ãã
DSLãšæ±çšèšèªã®éã«ã¯çŽ°ããå¢çç·ããããŸãã ããšãã°ãRubyã¯æ±çšèšèªãšããŠäœæãããŸããããRuby on Railsãšã®é¢é£ä»ãã«ãããäž»ã«Webã¢ããªã±ãŒã·ã§ã³ã§äººæ°ãåããŠããŸãã äžæ¹ãJavaScriptã¯ãããšããšã¯Webãã©ãŠã¶ãŒã¹ã¯ãªããçšã®ãµããžã§ã¯ãæåèšèªã§ããã ãããã圌ã¯ãŠã€ã«ã¹ã®ããã«å€ç°ãããã以æ¥ãå ã®ã¿ã¹ã¯ãã¯ããã«è¶ ããŠæé·ããŸããã
èšèªãšã¯äœã§ããïŒ
ãã®åºãç¯å²å šäœãèšèªãšåŒã°ããå Žåãèšèªã®å®çŸ©æ©èœã¯äœã§ããïŒ
ããªããèããŠããããšã¯ç¥ã£ãŠããŸãã HTMLã¯èšèªã§ã¯ãããŸããã ããã¯åãªãããŒã¯ã¢ããã§ãã 圌ã¯ã¢ã«ãŽãªãºã ã説æããããšã¯ã§ããŸãããã ãŸãã¯ïŒãæ£èŠè¡šçŸã¯èšèªã§ã¯ãããŸããã 圌ãã¯èªåã§åããŸããã å¥ã®èšèªã®åãªãæ§æã§ããã
ç§ãããæã£ãŠããŸããã ããããããèŠããšããããã®éããããææ§ã«èŠããŸããã ãããã£ãŠãç§ã®æåã®äž»èŠãªã¹ããŒãã¡ã³ãïŒ3ã€ã®ãã¡ïŒã¯ãããã°ã©ãã³ã°èšèªã¯æ¬è³ªçã«äº€æã®åªäœã§ãããšããããšã§ã ã ããã¯ã人ãšã³ã³ãã¥ãŒã¿ãŒãç解ã§ããè¡šèšã·ã¹ãã ã§ã ã
è¡šèšæ³ïŒè¡šèšæ³ïŒã¯ãèšèªã«æ§æãããããšãæå³ããŸãã ãæ確ããšã¯ããã®æ§æã§èšèªãæå³ãäŒããããšãæå³ããŸã ïŒãŸãã¯ããã掟æãªåèªã䜿çšãããŠããå Žåã¯ã ã»ãã³ãã£ã¯ã¹ ïŒã ãã®å®çŸ©ã¯ããã¹ãŠã®æ±çšããã°ã©ãã³ã°èšèªã察象ãšããŠããŸãã ãããŠãã¹ãŠã®DSLã ïŒãã ãããã¹ãŠã®ããŒã¿ã¹ããªãŒã ã§ã¯ãããŸãããããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãïŒã
ïŒãšããã§ããããã°ã©ãã³ã°ããšãèšèªãã¯æ £çšçã«äžç·ã«äœ¿çšãããåèªã§ããããããã®èšèªã¯ã³ã³ãã¥ãŒã¿ãŒãããã°ã©ã ããããã«äººã ã«ãã£ãŠäœ¿çšãããã ãã§ã¯ãããŸãããã³ã³ãã¥ãŒã¿ãŒã«ãã£ãŠç§ãã¡ãšéä¿¡ããããã«äœ¿çšãããå ŽåããããŸãïŒããšãã°ãSåŒïŒãæã«ã¯äºãã«éä¿¡ããããã«ïŒããšãã°ãXMLãJSONãHTMLãïŒééããªãããããã®æ©èœãé€å€ããã®ã¯ééã£ãŠããããã«æããŸãããå®éã«ã¯ãã¯ã-ããã°ã©ãã³ã°èšèªã§éåžžè¡ãããšã¯ãå®éã«ã¯ããã°ã©ãã³ã°ã§ãã
HTMLã³ãŒããæ€èšããŠãã ãããã³ã³ãã¥ãŒã¿ãŒãç¹ã«Webãã©ãŠã¶ãŒã«WebããŒãžãæç»ããæ¹æ³ãäŒããæ¹æ³ã§ãã ããã¯ã人éãšã³ã³ãã¥ãŒã¿ãŒãç解ã§ããè¡šèšæ³ïŒå±±æ¬åŒ§ãã¿ã°ãå±æ§ãªã©ïŒã§ãïŒ
charset
å±æ§ã¯æåãšã³ã³ãŒãã瀺ãã
p
ã¿ã°ã«ã¯æ®µèœãªã©ãå«ãŸããŸãïŒã
ãããå°ããªHTMLããŒãžã§ãã
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>My web page</title> </head> <body> <p>Hello <strong>world</strong></p> </body> <html>
HTMLãããã°ã©ãã³ã°èšèªã§ããããšã«åæããªããšä»®å®ããŸãã ããã Pythonã§ããŒãžã衚瀺ããŸãã ããã¯æ¬åœã®ããã°ã©ãã³ã°èšèªã§ãããïŒ
print "<!DOCTYPE html>" print "<html>" print "<head>" print "<meta charset=\"UTF-8\">" print "<title>My web page</title>" print "</head>" print "<body>" print "<p>Hello <strong>world</strong></p>" print "</body>" print "<html>"
Pythonãããã°ã©ãã³ã°èšèªã§ãããHTMLãããã§ãªãå Žåããã®Pythonãµã³ãã«ã¯ããã°ã©ã ã§ãããHTMLãµã³ãã«ã¯ããã§ã¯ãããŸããã
æããã«ãããã¯æ·åãããéãã§ãã ããã§ãPythonåã¯è€éããšã¹ãã¬ãªã¿ã€ãå以å€ã«ã¯äœãè¿œå ããŸããã æ°ã®æ¯ãªããšã¯ãWebããã°ã©ã ã管çãããšãã芳ç¹ããèŠãPythonããã°ã©ã ã®å¯äžã®èå³æ·±ãã»ãã³ãã£ãã¯ã³ã³ãã³ãã¯ãHTMLã«åã蟌ãŸããŠããããšã§ãïŒãããã
DOCTYPE
ã
meta
ã
strong
ãªã©ã®HTMLã¿ã°ã¯åŒæ°ãåãé¢æ°ãšèããããšãã§ããŸãïŒã ããžãã¯ã䜿çšãããšãHTMLã¯åçŽã§æè»æ§ã¯å£ããŸãããããã°ã©ãã³ã°èšèªã®ãŸãŸã§ãããšçµè«ä»ããããŸãã
åã蟌ã¿èšèª
HTMLãšPythonã䜿çšããäŸã ããããDSLãå¥ã®èšèªã«åã蟌ãããšã¯ããããšããã«ãããŸãã ãã®æ¹æ³ã§äœ¿çšãããèšèªã¯ã çµã¿èŸŒã¿ãšåŒã°ããŸãã ãããã¯ãèšèªããã°ã©ãã³ã°ã®æãäžè¬çãªåœ¢åŒãè¡šããŠããŸãã ããã°ã©ããŒãšããŠãããªãã¯ãã®ååãç¥ããªããŠãJOPã«é·å¹Žé Œã£ãŠããŸããã
ããšãã°ãæ£èŠè¡šçŸïŒä»ã®äŸïŒæååã®æžåŒèšå®çšã®
printf
ãæ¥ä»/æå»ãã¿ãŒã³çšã®CLDRãSQLïŒã æ£èŠè¡šçŸãç¬ç«ããèšèªãšèããããšã¯ã§ããŸããã ãããããã¹ãŠã®ããã°ã©ããŒã¯ãããäœã§ããããç¥ã£ãŠããŸãïŒ
^fo+(bar)*$
ããã«ããããããã®æ£èŠè¡šçŸããæ°ã«å ¥ãã®ããã°ã©ãã³ã°èšèªã«å°å ¥ããã°ãããŸãããã§ãããã ãã®ãããªäžè²«ããåäœã¯ãæ£èŠè¡šçŸè¡šèšãå€éšèšèªïŒ POSIX ïŒã§ããããã«ã®ã¿å¯èœã§ãã
HTMLãšåæ§ã«ããã¹ãèšèªè¡šèšã§åçã®åŒãäœæã§ããŸãã ããšãã°ãã©ã±ããã¯Schemeã®æ£èŠè¡šçŸ ïŒSREïŒããµããŒãããŠããŸãããããã¯SåŒè¡šèšã®æ£èŠè¡šçŸã§ãã äžèšã®ãã³ãã¬ãŒãã¯æ¬¡ã®ããã«èšè¿°ãããŸãã
(seq bos "f" (+ "o") (* (submatch "bar")) eos)
ããããã©ã±ããããã°ã©ãã¯SREåŒãã»ãšãã©äœ¿çšããŸããã ãããã¯é·ãããŠèŠãã«ããã
åã蟌ãŸããDSLã®å¥ã®éåšçãªäŸïŒæ°åŒã ãã¹ãŠã®ããã°ã©ããŒã¯ããããäœãæå³ãããç¥ã£ãŠããŸãïŒ
(1 + 2) * (3 / 4) - 5
æ°åŠçãªè¡šçŸã ãã§ã¯ãèå³æ·±ãããã°ã©ã ã¯äœæãããŸããã ããããä»ã®èšèªæ§æèŠçŽ ãšçµã¿åãããå¿ èŠããããŸãã ããããæ£èŠè¡šçŸãšåæ§ã«ãããã¯äººéå·¥åŠçã§å®çšçãªèšé²ã§ãã æ°åŒã«ã¯ã人ãšã³ã³ãã¥ãŒã¿ãŒã®äž¡æ¹ãç解ã§ããç¬èªã®è¡šèšæ³ãšæå³ãââãããããå¥åã®çµã¿èŸŒã¿èšèªãšããŠã®è³æ ŒããããŸãã
HTMLãããã°ã©ãã³ã°ãããŠãããšåè«ãèšã£ãŠããŸããïŒ
ããããããã§ãã HTMLïŒæ£èŠè¡šçŸãšæ°åŠè¡šçŸã®äž¡æ¹ïŒãåæ©çãªããã°ã©ãã³ã°èšèªãšããŠé©æ Œã§ããããšã確èªããŸãã ããã¯ãHTMLïŒãŸãã¯æ£èŠè¡šçŸãæ°åŠè¡šçŸïŒãæžãããšãåæ©çãªããã°ã©ãã³ã°ãšããŠé©æ Œã§ããããšãæå³ããŸãã
ãããã¯ããªãã§ãã ããã ãã¡ãããHTMLãšç®è¡ã®ã¿ã®ç¥èãæã€LinkedInã®ãããã°ã©ããŒãã§ãããããã¯ãã³ã»ã³ã¹ã§ãïŒãã ãã1é±éã§ãããã18äžãã«ã®ä»äºã«å°±ãã§ãããïŒã ããããããã¯å¥ã®åé¡ã§ããåŽååžå Žã§ãããã°ã©ããŒããšã¯ã©ãããæå³ã§ããã ç§ãã¡ã¯ããã«ã€ããŠè©±ããŠããŸããã
ãã¥ãŒãªã³ã°å šäœãã©ãã
ããã°ã©ãã³ã°èšèªã®ãã®å®çŸ©ãããããããå Žåã¯ããããããå®éã®ããã°ã©ãã³ã°èšèªã¯ãã¹ãŠã®å¯èœãªã¢ã«ãŽãªãºã ãè¡šçŸããå¿ èŠããããšæããŸããã€ãŸãã ãã¥ãŒãªã³ã°å®å šã§ããã¹ãã§ãã
ç§ã¯çŽæçã«ãã®ãããªèãã瀺åããããšãç解ããŠããŸãã åæ±çšããã°ã©ãã³ã°èšèªã¯ãã¥ãŒãªã³ã°å®å šã§ãã
ããããåé¡ã¯ãããäœãããŒã§ããããšã§ãã ãã¥ãŒãªã³ã°å®å šæ§ã¯ãå®äžçã§ã®èšèªã®äœ¿çšã«å¯Ÿå¿ããªãæè¡çãªæž¬å®åºæºã§ãã ããšãã°ãæ£èŠè¡šçŸã¯ãã¥ãŒãªã³ã°å®å šã§ã¯ãããŸããããæå°éã®è¡šèšã§å€ãã®èšç®ãè¡šçŸããå Žåã«åœ¹ç«ã¡ãŸãã HTMLããã¥ãŒãªã³ã°å®å šã§ã¯ãããŸãããããã©ãŠã¶ãŒãå¶åŸ¡ããã®ã«äŸ¿å©ãªæ¹æ³ã§ãã ããã©ãããã bfèšèªã¯ãã¥ãŒãªã³ã°å®å šã§ãããæãäºçŽ°ãªã¿ã¹ã¯ã§ãããäœãã€ã«ãã®ééäžå¯èœãªã³ãŒããå¿ èŠãšããŸãã
èšèªå¶é
èšèªã®å®çŸ©ã®äžã«äœããããŸããïŒ ãã
- ãã€ããªããŒã¿åœ¢åŒã¯èšèªãšã¯èŠãªãããŸããã ããšãã°ã
jpeg
ãã¡ã€ã«ã ã³ã³ãã¥ãŒã¿ãŒã¯ããããç解ã§ããŸããã人ã¯ç解ããŸããã ãŸãã¯PDFïŒãããã³ã°ãããšã人éãèªããéšåãå éšã«ãããŸãã ããããããã¯PDFã®ä»çµã¿ã«ãããã®ã§ãã PDFæ§é ã䜿çšããŠã¢ã€ãã¢ãæžãããšã«ã¯æå³ããããŸããã
- ããã¹ããã¡ã€ã«ã¯èšèªã§ã¯ãããŸããã Homer's Iliadã®ãã¡ã€ã«ããããšããŸãã ç§ãã¡äººéã¯ãããèªãã§ç解ããããšãã§ããŸãã ã³ã³ãã¥ãŒã¿ã¯ãããšãã°ãã®å
容ãå°å·ããããšã§ãã¡ã€ã«ãç°¡åã«åŠçã§ããŸãããå
éšã®ããã¹ãã¯ã³ã³ãã¥ãŒã¿ã«ã¯ç解ã§ããŸããã
- ã°ã©ãã£ã«ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯èšèªã§ã¯ãããŸããã ã¯ãããããã¯è¡šèšã·ã¹ãã ã§ãïŒããã¹ããšç»åã«äŸåããŸãïŒã ãããããããã¯äººã ã«ããç解ã§ããŸããã ã³ã³ãã¥ãŒã¿ãŒã¯GUIãæç»ããŸãããããããç解ããŸããã
ã€ã³ã¿ãŒãã§ã€ã¹ãšããŠã®èšèª
äžèšã§ã¯ãããã°ã©ãã³ã°èšèªã人ãšã³ã³ãã¥ãŒã¿ãŒã®éã®ã亀æã®åªäœããšããŠèª¬æããŸããã ãããã£ãŠãèšèªã¯ããåºãã«ããŽãªãŒã«åé¡ããããããã€ã³ã¿ãŒãã§ãŒã¹ãšåŒã³ãŸã ã
ããã¯ã2ã€ç®ã®åºæ¬çãªã¹ããŒãã¡ã³ãïŒ3ã€ã®ãã¡ïŒã«ã€ãªãããŸã ãã€ãŸãã èšèªããã°ã©ãã³ã°ã¯åºæ¬çã«ã€ã³ã¿ãŒãã§ã€ã¹ãèšèšããæ¹æ³ã§ã ã ã€ã³ã¿ãŒãã§ãŒã¹ã«ã€ããŠèããããªããJOPã奜ãã§ãã ããã§ãªãå Žåã§ããä»ã®æ¹æ³ã§ã¯éæã§ããªãå¯èœæ§ã®ããã€ã³ã¿ãŒãã§ã€ã¹ãäœæããJOPã倧奜ãã§ãã
ã€ã³ã¿ãŒãã§ãŒã¹ãšããŠã®èšèªã®ç§ã®ãæ°ã«å ¥ãã®äŸã®1ã€ã¯bragã§ãããã¯Racketã§äœæãããããŒãµãŒãžã§ãã¬ãŒã¿ãŒèšèªã§ãã lex / yaccããŒã«ãã§ãŒã³ã䜿çšããããšãããå Žåãå€ãã®å Žåãç®æšã¯BNFææ³ããããŒãµãŒãçæããããšã§ããããšãç¥ã£ãŠããŸãã ããšãã°ã bfã®å Žå ã次ã®ããã«ãªããŸãã
bf-program : (bf-op | bf-loop)* bf-op : ">" | "<" | "+" | "-" | "." | "," bf-loop : "[" (bf-op | bf-loop)* "]"
æ±çšèšèªã§ããŒãµãŒãäœæããã«ã¯ããã®ææ³ãå€æ°ã®ãã€ãã£ãã³ãŒãã«ç¿»èš³ããå¿ èŠããããŸãã ããã¯éå±ãªä»äºã§ãã ãããŠç¡æå³ã§ã-ææ³ããã§ã«æžãçããŠããŸãããïŒ ãªãåã³ããã®ã§ããïŒ
ãããã
brag
ç§ãã¡ã®æ¬²æãæºãããŸãã ããŒãµãŒãäœæããã«ã¯ããã¡ã€ã«ã«
#Lang brag
ãšããè¡ãè¿œå ããã ãã§ãBNFææ³ã
brag
ãœãŒã¹ã³ãŒãã«éæ³ã®ããã«å€æããŸãã
#Lang brag bf- : (Bf-op | Bf-loop)* bf-op : ">" | "<" | "+" | "-" | "."| "," Bf-loop : "["(Bf-op | Bf-loop)* "]"
ã§ããïŒ ã³ã³ãã€ã«æã«ããã®ãã¡ã€ã«ã¯ãã®BNFææ³ãå®è£
parse
é¢æ°ããšã¯ã¹ããŒãããŸãã
ããã¯ä»ã®ãªãã·ã§ã³ãããæããã«åªããŠãããããç§ã®ãæ°ã«å ¥ãã®äŸã®1ã€ã§ãã ããã«ãæ±çšèšèªã§ã¯ããã®ãããªã€ã³ã¿ãŒãã§ã€ã¹ã¯å®éã«ã¯äžå¯èœã§ãã
ããããJOPããã°ã©ããŒã¯åžžã«ãã®ãããªã€ã³ã¿ãŒãã§ãŒã¹ãäœæããŸãã
èšèªãæé«ã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ããå Žå
ããã«ããã èšèªã«ã¯ã€ã³ã¿ãŒãã§ãŒã¹ãããåªããç¬èªã®å©ç¹ããããšãã ã3çªç®ã®æçµçãªåºæ¬çè«ã«è³ããŸã ã ãã¡ããã以äžã®ã«ããŽãªã¯ç¶²çŸ çã§ãæä»çã§ããããŸããã ãããããã®ãããªç¶æ³ã§ã¯ãIOPã«ã¯å€ãã®ã¡ãªãããããããšãããããŸããã
1.ã¹ãã«ã®äœãããã°ã©ããŒãéããã°ã©ããŒããŸãã¯æ zyãªããã°ã©ããŒçšã®ã€ã³ã¿ãŒãã§ãŒã¹ãäœæããå ŽåïŒåŸè ã®ã«ããŽãªãŒã®ãµã€ãºãéå°è©äŸ¡ããªãã§ãã ããïŒã
ããšãã°ãã©ã±ããã«ã¯æŽç·ŽãããWebã¢ããªã±ãŒã·ã§ã³ã©ã€ãã©ãªããããŸãã ãã ããWeb
web-server/insta
èšèªã䜿çšããŠç°¡åãªWebãµãŒããŒããã°ããèµ·åããããšãã§ã
web-server/insta
ã
#lang web-server/insta (define (start request) (response/xexpr '(html (body "Hello LOP World"))))
Matthew Flattã®èšäºãCraating Languages in Racketãã¯ããã¬ã€å¯èœãªããã¹ãã¢ããã³ãã£ãŒãçæããèšèªã瀺ããŠããŸãã
brag
ããã«ãããã°ã©ã ãšããããã¯ä»æ§ã®ããã«èŠããŸãããåäœããŸãïŒ
#lang txtadv ===VERBS=== north, n "go north" south, s "go south" get _, grab _, take _ "get" ===THINGS=== ---cactus--- get "Ouch!" ===PLACES=== ---desert--- "You're in a desert. There is nothing for miles around." [cactus, key] north meadow south desert
2.è¡šèšãç°¡ç¥åããå Žåã 1ã€ã®äŸã¯æ£èŠè¡šçŸã§ãã å¥ã®äŸã¯ããªã³ã©ã€ã³ã®æ¬ãæžãããã®ç§ã®äž»é¡æåèšèªã§ããè±ç²ã§ãã Pollenã¯Racketã«äŒŒãŠããŸããããã§ã®ã¿ãããã¹ãã¢ãŒãã§äœæ¥ãéå§ããã³ã³ãã³ãã«åã蟌ãŸããRacketã³ãã³ãã瀺ãããã«ç¹æ®æåã䜿çšããŸãïŒPollenã¯ScribbleãšåŒã°ããRacketããã¥ã¡ã³ãèšèªã«åºã¥ããŠãããããã¯è² è·ã®å€§éšåãå ããŸãïŒã ãããã£ãŠããã®æ®µèœã®å§ãŸãã¯æ¬¡ã®ããã«ããã°ã©ã ãããŠããŸãã
. â . â - âlink["https://pollenpub.com/"]{Pollen} -.
Pollenã¯ãå¿ èŠãªãã¹ãŠã®ã¿ã°ã貌ãä»ãããããã絶察çãªHTMLã«å€æããããšãéèŠããŠããŸãã æåã®ããŒã¯ã¢ããïŒããŒãžãå®å šã«å¶åŸ¡ïŒã®ãã¹ãŠã®å©ç¹ã¯ãŸã ãããŸãããæ¬ ç¹ã¯ãããŸããïŒããšãã°ã誀ã£ãŠéããããŠããªãã¿ã°ãæ®ãããšã¯ã§ããŸããïŒã
ç°¡æè¡šèšæ³ã®ãã1ã€ã®äŸã¯ã次ã®ãããªLindenmayerã·ã¹ãã ã®ãã©ã¯ã¿ã«çæããã³æç»èšèªã§ãã
lindenmayer
ã§ãã

å žåçãªã©ã±ããã§ã¯ãLindenmayerããã°ã©ã ã¯æ¬¡ã®ããã«ãªããŸãã
#lang racket/base (require lindenmayer/simple/compile) (define (finish val) (newline)) (define (A value) (display 'A)) (define (B value) (display 'B)) (lindenmayer-system (void) finish 3 (A) (A -> AB) (B -> A))
ãã ãããã¡ã€ã«ã®å é ã«ãã
#lang
è¡šèšãå€æŽããã ãã§ãç°¡æè¡šèšã䜿çšã§ããŸãã
#lang lindenmayer/simple ## axiom ## A ## rules ## A -> AB B -> A ## variables ## n=3
ãã®èšèªã¯ãããªãããã§ã«Lã·ã¹ãã ã«ç²ŸéããŠããããšãåæãšããŠããŸãã ããããç°¡ç¥åãããè¡šèšæ³ã«ãããåžæããããšãå®è¡ããããã°ã©ã ã«åžæãç°¡åã«æžãçããããšãã§ããŸãã
3.æ¢åã®è¡šèšã䜿çšããå Žåã äžèšã§ã
brag
ããœãŒã¹ã³ãŒããšããŠBNFææ³ã䜿çšããæ¹æ³ãèŠãŸããã
#lang brag bf-program : (bf-op | bf-loop)* bf-op : ">" | "<" | "+" | "-" | "." | "," bf-loop : "[" (bf-op | bf-loop)* "]"
å¥ã®äŸã Pollenãè©Šãã人ã¯ããã¯ããããã¯çŽ æŽãããããšã§ãããMarkdownã奜ãã§ããããšèšããŸããã åé¡ãããŸããïŒ
pollen/markdown
ããŠã³ã¯ãè±ç²ã»ãã³ãã£ã¯ã¹ãæäŸããè±ç²åŒã§ãããéåžžã®ããŒã¯ããŠã³è¡šèšãåãå ¥ããŸãã
. â . â - [Pollen]("https://pollenpub.com/") -.
æã楜ããããšã¯ïŒ MarkdownããŒãµãŒãšæ¢åã®ã³ãŒããçµã¿åãããŠããã®æ¹èšããã£ã1æéã§æžããŸããã
4.ä»ã®èšèªã®äžéã¿ãŒã²ãããäœæããå Žåã JSONãYAMLãSåŒãããã³XMLã¯ãã¹ãŠããã·ã³ã®èªã¿åãããã³æžã蟌ã¿çšã®ããŒã¿åœ¢åŒãå®çŸ©ãããã¡ã€ã³åºæã®èšèªã§ãã
Perfect Racketã§ã¯ã1ã€ã®ãã¬ãŒãã³ã°èšèªã¯
jsonic
ãšåŒã°ã
jsonic
ã JSONã«ã©ã±ããåŒãåââã蟌ãããšãã§ãããããJSONãããã°ã©ã å¯èœã«ã§ããŸãã ãœãŒã¹ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
#lang jsonic // a line comment [ @$ 'null $@, @$ (* 6 7) $@, @$ (= 2 (+ 1 1)) $@, @$ (list "array" "of" "strings") $@, @$ (hash 'key-1 'null 'key-2 (even? 3) 'key-3 (hash 'subkey 21)) $@ ]
éåžžã®JSONã«ã³ã³ãã€ã«ããŸãã
[ null, 42, true, ["array","of","strings"], {"key-1":null,"key-3":{"subkey":21},"key-2":false} ]
5.ããã°ã©ã ã®äž»èŠéšåãæ§æã§ããå Žåã ããšãã°ãDotfilesã¯DSLãšããŠèšè¿°ã§ããŸãã ã©ã±ããã®ããè€éãªäŸã¯ãJSON Alamaã®RiposteãJSONããŒã¹ã®HTTP APIãã¹ãèšèªã§ãã
#lang riposte $productId := 41966 $qty := 5 $campaignId := 1 $payload := { "product_id": $productId, "campaign_id": $campaignId, "qty": $qty } POST $payload cart/{uuid}/items responds with 200 $itemId := /items/0/cart_item_id GET cart responds with 200
ãããã¥ã¢ã¹ã¯ãªããèšèªãšããŠãRiposteã¯å¹³åçãªããããã¡ã€ã«ãããã¯ããã«ã¹ããŒãã§ãã HTTPãã©ã³ã¶ã¯ã·ã§ã³ã«å¿ èŠãªãã¹ãŠã®äžéã³ãŒããé ãããŠãŒã¶ãŒããã¹ãã®äœæã«éäžã§ããããã«ããŸãã ããã¯ãŸã ããŠã¹ã¯ãªãŒãã³ã°ã§ãã ããããå°ãªããšãããªããæ°ã«ããäžåž¯ã«éäžããããšãã§ããŸãã
ã©ã±ãããéžã¶çç±
å€ãã®å ŽåãJOPã®æ¹å€è ã¯æ¬¡ã®ããã«å°ããŸããããã¡ã€ã³åºæã®èšèªãäœæããçç±ã¯äœã§ããïŒ ãã€ãã£ãã©ã€ãã©ãªãäœæããæ¹ãç°¡åã§ããïŒã
ããããé©åãªããŒã«ãããã°ç°¡åã§ã¯ãããŸããã ã©ã±ããã¯æ®éã§ã¯ãããŸãããNOPå°çšã«ãŒãããèšèšãããŠããŸãããããã£ãŠãã©ã±ããã«DSLãå®è£ ããããšã¯ãä»ã®æ¹æ³ãããéããå®ããç°¡åã§ããããšãã°ãç§ã®æ¬ã®æåã®ã¬ãã¹ã³ã§ã¯ãã©ã±ããã䜿çšããããšããªãå Žåã§ãã1æéã§æ°ããèšèªãéçºããæ¹æ³ã瀺ããŸããã
Racketã®ãã¹ãŠã®DSLã®å éšã§ã¯ããœãŒã¹ãããœãŒã¹ãžã®ã³ã³ãã€ã©ãŒãå®éã«åäœããDSLè¡šèšãšã»ãã³ãã£ã¯ã¹ãåçã®Racketããã°ã©ã ã«å€æããŸãããã®ãããRacket DSLã¯æåã§èšè¿°ãããCã³ãŒãã»ã©é«éã«å®è¡ã§ããŸãããããã¹ãŠã®RacketããŒã«ãšã©ã€ãã©ãªã¯åDSLã§äœ¿çšã§ããŸããçç£æ§ã¯äœäžããŸãããå©äŸ¿æ§ã¯ç¹°ãè¿ãåã¡ãŸãã DSLã®äœæã䟿å©ã§ç°¡åãªå Žåãããã¯ã¯ããã«åºç¯ãªåé¡ã®çŸå®çãªéžæè¢ã«ãªããŸãã
ãããã£ãŠãæ¹å€ã«çããããã«-ããããDSLã¯å¿ ããããã€ãã£ãã©ã€ãã©ãªãããå€ãã®äœæ¥ãå¿ èŠãšããŸãããããã«ããã§ã«èŠãããã«ãã€ã³ã¿ãŒãã§ã€ã¹ãšããŠãèšèªã¯ãã€ãã£ãã©ã€ãã©ãªã§ã¯ã§ããªãããšãå®è¡ã§ããŸãã
ãªããã¯ããªã®ãïŒ
ãã¹ãŠã®DSLã¯Racketã«ã³ã³ãã€ã«ããããããããã°ã©ãã¯DSLè¡šèšããã€ãã£ãã®Racketã«å€æããæ§æå€æããã°ã©ã ãäœæããå¿ èŠããããŸãããããã®æ§æã³ã³ããŒã¿ã¯ãã¯ããšåŒã°ããŸããå®éããããã¯Racketã³ã³ãã€ã©ã®æ¡åŒµãšããŠèª¬æã§ããŸãã
ã©ã±ãããã¯ãã·ã¹ãã ã¯åºå€§ã§ãšã¬ã¬ã³ãã§ãééããªãçå ã®çç ã§ããç§ã®æ¬ã®å€ãã¯ã©ã±ãããã¯ããæ±ãåã³ã«ã€ããŠã§ãã次ã®2ã€ã®åªããæ©èœã«ååãä»ããããšãã§ããŸãã
- Racket , . . , , Racket , , , , , . ( . « » ).
- ã©ã±ãããã¯ãã¯è¡ççã§ããã€ãŸããããã©ã«ãã§ã¯ããã¯ãã«ãã£ãŠäœæãããã³ãŒãã¯ããã¯ããå®çŸ©ãããŠããã¬ãã·ã«ã«ã³ã³ããã¹ããä¿æããŸããå®éã«ã¯ãããã«ãããDSLã§éåžžå¿ èŠãšãããèšå€§ãªéã®äžèŠãªãžã§ã¹ãã£ãŒããªããªããŸãïŒè©³çŽ°ã«ã€ããŠã¯ããè¡çãã®ç« ãåç §ããŠãã ããïŒã
ããšãã°ãPythonã§DSLãå®è£ ããããšã¯ã§ããŸããïŒ ãã¡ãããå®éãç§ã¯æåã®DSLãç¹ã«Pythonã§äœæããŸããããããã§ãç§ã®ã¿ã€ããã¶ã€ã³äœæ¥ã§äœ¿çšããŠããŸãããŸãããããäžåºŠã ãã§ååã§ããããã以æ¥ãç§ã¯ã©ã±ããã䜿çšããŠããŸãã
çµè«ïŒYaOPã§ã®åå©
çŸæç¹ã§ã¯ã次ã®2ã€ã®åå¿ã®ããããããããŸãã
- « , , » . , . , , . . . , . .
- «, , c Racket » . , - Riposte , â ( ):
[ ] - Racket. , , - ⊠: « API , ?» : « Riposte». , , [DSL], , . «» Racket. DSL , .
èšäºã®æåŸã«ããªãã©ã±ããïŒãªãLispãªã®ãïŒã Lispèšèªãã¯ãããã°ã©ããŒãææ³å®¶ãšããŠã®å¯èœæ§ã解ãæŸã¡ãããã«ãã£ãŠéæã§ããããšãžã®æåŸ ãé«ããæ©äŒãäžãããšèšããŸãããã
IOPã¯åæ§ã®æ©äŒãæäŸããŸãïŒããã°ã©ãã³ã°èšèªãç§ãã¡ã®ããã«äœãã§ãããã«ã€ããŠã®æåŸ ãé«ããããšã§ããèšèªã¯ãã©ãã¯ããã¯ã¹ã§ã¯ãããŸããããããã¯ãèšèšå¯èœãªã€ã³ã¿ãŒãã§ã€ã¹ã§ããåæã«ãç§ãã¡ã¯ããã°ã©ã ã®å©ããåããŠäœãã§ããããšããæ°ããå¯èœæ§ãåãéããŠããŸãã
æé©ãªããã°ã©ãã³ã°ææ³ãèŠã€ãã£ãããããã䜿çšããŠãã ãããOOPãšRacketãã§ããã®ã§ãäºåºŠãšæ»ã£ãŠããŸããã
ããã«èªã
- « Racket» ( ). . â , Racket .
- Racket 2019 . Racket : « Racket» ( ) « » ( Racket).
- « Racket: » . , â , «» ( ), , .
- ãã©ã±ããã§ã®èšèªã®äœæããã·ã¥ãŒã»ãã©ããããã·ã¥ãŒã¯ãã©ã±ããã®ãªãŒãã¢ãŒããã¯ãã§ãïŒãããŠåœŒã¯ç§ã®æ¬ã®åºæãæžããŸããïŒã圌ã®çãèšäºã¯ãã¹ããŒãã²ãŒã éçºçšã®DSLãäŸãšããŠäœ¿çšããŠãDSLèšèšã®è€éããå¢ããŠããããšãå®å
šã«ç€ºããŠããŸãã
- ã®ããå€ãã®äŸ DSLãã©ã±ããã§æžãããŠãããããã«å€ãã®ã