ãã®èšäºã§ã¯ãéçã«åä»ããããèšèªãšåçã«åä»ããããèšèªã®éãã«ã€ããŠèª¬æããã匷ããåãšã匱ããåã®æŠå¿µã調ã¹ãç°ãªãèšèªã®åä»ãã·ã¹ãã ã®èœåãæ¯èŒããŸãã æè¿ãããã°ã©ãã³ã°ã«ãããŠãã峿 Œã§åŒ·åãªã¿ã€ãã³ã°ã·ã¹ãã ãžã®æç¢ºãªåãããããããã¿ã€ããšã¿ã€ãã³ã°ã«ã€ããŠè©±ããšãã®æå³ãçè§£ããããšãéèŠã§ãã

ã¿ã€ãã¯ãå¯èœãªå€ã®ã³ã¬ã¯ã·ã§ã³ã§ãã æŽæ°ã¯ãå€0ã1ã2ã3ãªã©ãæã€ããšãã§ããŸãã ããŒã«å€ã¯trueãŸãã¯falseã§ãã ããšãã°ããGiveããšã5ãã®å€ãå¯èœãªãGive Fiveãã¿ã€ããªã©ãç¬èªã®ã¿ã€ããèããããšãã§ããŸãã ããã¯æååãæ°å€ã§ã¯ãªããæ°ããå¥åã®ã¿ã€ãã§ãã
éçã«åä»ããããèšèªã¯å€æ°ã®åãå¶éããŸããããšãã°ãããã°ã©ãã³ã°èšèªã¯xãæŽæ°ã§ããããšãç¥ã£ãŠããå ŽåããããŸãã ãã®å Žåãããã°ã©ããŒã¯x = true
ãè¡ãããšãçŠããããŠãããããã¯èª€ã£ãã³ãŒãã«ãªããŸãã ã³ã³ãã€ã©ã¯ã³ã³ãã€ã«ãæåŠããããããã®ãããªã³ãŒããå®è¡ããããšããã§ããŸããã å¥ã®éçã«åä»ããããèšèªã«ã¯ä»ã®è¡šçŸèœåãããã人æ°ã®ããåã·ã¹ãã ã¯ã©ããDaiPyatåã衚çŸã§ããŸããïŒããããå€ãã¯ä»ã®ããæŽç·Žãããã¢ã€ãã¢ã衚çŸã§ããŸãïŒã
åçã«åä»ããããèšèªã¯å€ãåã§ããŒã¯ããŸããèšèªã¯1ãæŽæ°ã2ãæŽæ°ã§ããããšãç¥ã£ãŠããŸããã倿°xãåžžã«æŽæ°ãå«ãããšãç¥ãããšã¯ã§ããŸããã
èšèªã©ã³ã¿ã€ã ã¯ããããã®ã©ãã«ãããŸããŸãªæç¹ã§ãã§ãã¯ããŸãã 2ã€ã®å€ã远å ããããšãããšã圌女ã¯ããããæ°å€ãæååããŸãã¯é
åã§ãããã©ããã確èªã§ããŸãã æ¬¡ã«ãã¿ã€ãã«å¿ããŠããããã®å€ã远å ãæ¥çããŸãã¯ãšã©ãŒãåºããŸãã
éçã«åä»ããããèšèª
éçèšèªã¯ãããã°ã©ã ã®éå§åã§ãã£ãŠããã³ã³ãã€ã«æã«ããã°ã©ã ã®åããã§ãã¯ããŸãã åãèšèªã®èŠåã«éåããããã°ã©ã ã¯ãã¹ãŠäžæ£ãšèŠãªãããŸãã ããšãã°ãã»ãšãã©ã®éçèšèªã¯ãåŒ"a" + 1
ãæåŠããŸãïŒCã¯ãã®èŠåã®äŸå€ã§ãïŒã ã³ã³ãã€ã©ã¯ã "a"ãæååã§ããã1ãæŽæ°ã§ããã +
ãå·Šå³ã®éšåãåãåã§ããå Žåã«ã®ã¿æ©èœããããšãç¥ã£ãŠããŸãã ãã®ãããåé¡ãããããšãçè§£ããããã«ããã°ã©ã ãå®è¡ããå¿
èŠã¯ãããŸããã éçã«åä»ããããèšèªã®ååŒã¯ãã³ãŒããå®è¡ããã«å®çŸ©ã§ããç¹å®ã®åãåç
§ããŸãã
å€ãã®éçåä»ãèšèªã§ã¯ãåãæå®ããå¿
èŠããããŸãã Java public int add(int x, int y)
ã®é¢æ°ã¯public int add(int x, int y)
2ã€ã®æŽæ°ãåãã3çªç®ã®æŽæ°ãè¿ããŸãã ä»ã®éçã«åä»ããããèšèªã¯ãåãèªåçã«å€å¥ã§ããŸãã Haskellã®åãå ç®é¢æ°ã¯æ¬¡ã®ããã«ãªããŸãïŒ add xy = x + y
ã èšèªã®çš®é¡ã¯ããããŸãããã +
ãæ°å€ã«å¯ŸããŠã®ã¿æ©èœããããšãããã£ãŠããããã x
ãšy
ã¯æ°å€ã§ããå¿
èŠãããããã add
颿°ã¯åŒæ°ãšããŠ2ã€ã®æ°å€ãåãåããŸãã
ããã¯ããéçãåã·ã¹ãã ãæžãããã®ã§ã¯ãããŸããã Haskellã®åã·ã¹ãã ã¯ãéçã§ãå³å¯ã§ã匷åãªæ©èœã§æåã§ããããããã®ãã¹ãŠã®åéã§ãHaskellã¯Javaã«å
ãããŠããŸãã
åçã«åä»ããããèšèª
åçã«åä»ããããèšèªã§ã¯ãåãæå®ããå¿
èŠã¯ãããŸããããããèªäœã§åãå®çŸ©ããå¿
èŠããããŸããã 倿°ã®ã¿ã€ãã¯ãèµ·åæã«ç¹å®ã®å€ãæã€ãŸã§äžæã§ãã ããšãã°ãPythonã®é¢æ°
def f(x, y): return x + y
2ã€ã®æŽæ°ãæ¥çç·ããªã¹ããªã©ã远å ã§ããŸãããããã°ã©ã ãå®è¡ãããŸã§æ£ç¢ºã«äœãèµ·ãã£ãŠããã®ãçè§£ã§ããŸããã ããããããæç¹ã§ã颿°fã¯2è¡ã§åŒã³åºãããå¥ã®ãšãã«2ã€ã®æ°å€ã§åŒã³åºãããŸãã ãã®å Žåãxãšyã«ã¯ãç°ãªãæéã«ç°ãªãã¿ã€ãã®å€ãå«ãŸããŸãã ãããã£ãŠãåçèšèªã®å€ã«ã¯åããããŸããã倿°ã颿°ã«ã¯åããªããšåœŒãã¯èšããŸãã å€1ã¯ééããªãæŽæ°ã§ãããxãšyã¯ä»»æã§ãã
æ¯èŒ
ã»ãšãã©ã®åçèšèªã¯ãåã誀ã£ãŠäœ¿çšããããšãšã©ãŒãã¹ããŒããŸãïŒJavaScriptã¯ããç¥ãããŠããäŸå€ã§ããæå³ããªããªãå Žåã§ããåŒã®å€ãè¿ãããšããŸãïŒã åçã«åä»ããããèšèªã䜿çšããå ŽåãæŠéç°å¢ã§ã¯"a" + 1
ãšãã圢åŒã®åçŽãªãšã©ãŒãçºçããå¯èœæ§ããããŸãã éçèšèªã¯ãã®ãããªãšã©ãŒãé²ããŸããããã¡ããã鲿¢ã®çšåºŠã¯åã·ã¹ãã ã®èœåã«äŸåããŸãã
éçèšèªãšåçèšèªã¯ãããã°ã©ã ã®æ£ç¢ºæ§ã«é¢ããæ ¹æ¬çã«ç°ãªãèãæ¹ã«åºã¥ããŠæ§ç¯ãããŠããŸãã åçèšèª"a" + 1
ãããæ£ããããã°ã©ã ã§ããã³ãŒããèµ·åãããã©ã³ã¿ã€ã ã«ãšã©ãŒã衚瀺ãããŸãã ãã ããã»ãšãã©ã®éçã«åä»ããããèšèªã§ã¯ãåŒ"a" + 1
ã¯ããã°ã©ã ã§ã¯ãããŸãããã³ã³ãã€ã«ãå®è¡ããããŸããã ããã¯ãã©ã³ãã ãªæåã®ã»ããã®ãããªç¡å¹ãªã³ãŒã!&%^@*&%^@*
ã¯ç¡å¹ãªã³ãŒãã§ãã æ£ç¢ºããšäžæ£ç¢ºããšãããã®è¿œå ã®æŠå¿µã¯ãåçèšèªã§ã¯åçã®ãã®ã§ã¯ãããŸããã
匷ãã¿ã€ããšåŒ±ãã¿ã€ã
ã匷ãããšã匱ããã®æŠå¿µã¯éåžžã«ãããŸãã§ãã ãããã®äœ¿çšäŸãããã€ã瀺ããŸãã
ã匷ãããšã¯ãéçããæå³ããå ŽåããããŸãã
ããã§ã¯ãã¹ãŠãåçŽã§ããããéçããšããçšèªã䜿çšããããšããå§ãããŸããã»ãšãã©ã®çšèªã䜿çšãããçè§£ãããŠããããã§ãã
ã匷ãããšã¯ããæé»çãªå倿ãè¡ããªããããšãæå³ããå ŽåããããŸãã
ããšãã°ãJavaScriptã§ã¯"a" + 1
ãèšè¿°ã§ããŸãããããã¯ã匱ãã¿ã€ãã³ã°ããšåŒã¶ããšãã§ããŸãã ããããã»ãšãã©ãã¹ãŠã®èšèªã¯1ã€ãŸãã¯å¥ã®ã¬ãã«ã®æé»çãªå€æãæäŸããŸããããã«ãããæŽæ°ãã1 + 1.1
ãªã©ã®æµ®åå°æ°ç¹æ°ã«èªåçã«åãæ¿ããããšãã§ããŸãã å®éã«ã¯ãã»ãšãã©ã®äººã¯ã匷ãããšããèšèã䜿çšããŠã蚱容å¯èœãªå€æãšèš±å®¹ã§ããªã倿ã®å¢çãå®çŸ©ããŸãã äžè¬ã«åãå
¥ããããŠããå¢çç·ã¯ãããŸãã;ãããã¯ãã¹ãŠäžæ£ç¢ºã§ãããç¹å®ã®äººã®æèŠã«äŸåããŠããŸãã
ã匷ãããšã¯ãèšèªã®å³å¯ãªã¿ã€ãã³ã°èŠåãåé¿ã§ããªãããšãæå³ããå ŽåããããŸãã
- ã匷ãããšã¯ãã¡ã¢ãªã»ãŒããæå³ããå ŽåããããŸãã
Cã¯ãã¡ã¢ãªã»ãŒãã§ãªãèšèªã®äŸã§ãã xs
ã4ã€ã®æ°å€ã®é
åã®å ŽåãCã¯ã³ãŒãxs[5]
ãŸãã¯xs[1000]
ãåãã§å®è¡ãã xs[5]
çŽåŸã«ã¡ã¢ãªããå€ãè¿ããŸãã
ãããŸãããã ããã¯ãããã€ãã®èšèªããããã®å®çŸ©ãæºããæ¹æ³ã§ãã ã芧ã®ãšãããHaskellã ããããããç¹ã§äžè²«ããŠã匷åãã§ãã ã»ãšãã©ã®èšèªã¯ããã»ã©æç¢ºã§ã¯ãããŸããã
èšèª | éç | æé»çãªå€æïŒ | 峿 Œãªã«ãŒã«ïŒ | ã¡ã¢ãªã«ãšã£ãŠå®å
šã§ããïŒ |
---|
C | 匷ã | ã©ããã£ãŠ | 匱ã | 匱ã |
Java | 匷ã | ã©ããã£ãŠ | 匷ã | 匷ã |
ãã¹ã±ã« | 匷ã | 匷ã | 匷ã | 匷ã |
Python | 匱ã | ã©ããã£ãŠ | 匱ã | 匷ã |
Javascript | 匱ã | 匱ã | 匱ã | 匷ã |
ïŒãæé»çãªå€æãåã®ããã€ãã©ã®ããã«ããšã¯ã匷ããã®ãšåŒ±ããã®ãšã®åºå¥ãã蚱容ã§ãããšèãããã倿ã®çš®é¡ã«ãã£ãŠç°ãªãããšãæå³ããŸãïŒã
å€ãã®å Žåãã匷ããããã³ã匱ãããšããçšèªã¯ãäžèšã®ããŸããŸãªå®çŸ©ãããã³ããã«ç€ºãããŠããªãä»ã®å®çŸ©ã®äžå®ã®çµã¿åãããæããŸãã ãã®æ··ä¹±ã«ãããã匷ãããšã匱ãããšããèšèã¯ã»ãšãã©æå³ããªããªããŸãã ãããã®çšèªã䜿çšããå Žåã¯ãæ£ç¢ºã«äœãæå³ããã®ãã説æããããšããå§ãããŸãã ããšãã°ããæååã«æ°åã远å ãããšJavaScriptã¯å€ãè¿ããŸãããPythonã¯ãšã©ãŒãè¿ããŸãããšèšãããšãã§ããŸãã ãã®å Žåãã匷ãããšããèšèã®å€ãã®æå³ã«ã€ããŠåæã«éããåªåãç¡é§ã«ããªãã§ãããã ãŸãã¯ãããã«æªãããšã«ãçšèªãåå ã§æªè§£æ±ºã®èª€è§£ãçããŸãã
ã»ãšãã©ã®å Žåãã€ã³ã¿ãŒãããäžã®ã匷ããããã³ã匱ãããšããçšèªã¯äžæç¢ºã§ãããç¹å®ã®äººã
ã®æèŠãäžååã«å®çŸ©ãããŠããŸãã 圌ãã¯èšèªããæªãããŸãã¯ãè¯ãããšåŒã¶ããã«äœ¿çšããããã®æèŠã¯å°éçšèªã«å€ãããŸãã
ã¯ãªã¹ã»ã¹ãã¹ãæžããããã« ïŒ
匷ãåä»ãïŒç§ã倧奜ãã§ãç§ãå¿«é©ã«æããåã·ã¹ãã ã
匱ãã¿ã€ãã³ã°ïŒç§ãæ©ãŸããããæ°ã«å
¥ããªãåã·ã¹ãã ã
段éçãªã¿ã€ãã³ã°
åçèšèªã«éçåã远å ããããšã¯å¯èœã§ããïŒ ããå Žåã«ã¯ãã¯ãã ä»ã§ã¯ãããã¯å°é£ãŸãã¯äžå¯èœã§ãã æãæãããªåé¡ã¯ãåçèšèªã®eval
ããã³ãã®ä»ã®åæ§ã®æ©èœã§ãã Pythonã§1 + eval("2")
ãå®è¡ãããš3ãåŸãããŸããã 1 + eval(read_from_the_network())
ã¯äœãäžããŸããïŒ å®è¡æã«äœããªã³ã©ã€ã³ã«ãªã£ãŠãããã«ãã£ãŠç°ãªããŸãã æ°å€ãåŸãããã°ãåŒã¯æ£ããã§ãã æååã®å Žåããããã éå§ããåã«èª¿ã¹ãããšã¯äžå¯èœã§ãããããåãéçã«è§£æããããšã¯ã§ããŸããã
å®éã®äžååãªè§£æ±ºçã¯ã eval()
åŒãAnyã«èšå®ããããšã§ããããã¯ãäžéšã®ãªããžã§ã¯ãæåããã°ã©ãã³ã°èšèªã®ObjectãŸãã¯Goã®ã€ã³ã¿ãŒãã§ãŒã¹interface {}
ã«äŒŒãŠããŸããããã¯ãä»»æã®å€ãæºããã¿ã€ãã§ãã
Anyåã®å€ã¯äœã«ãã£ãŠãå¶éãããªããããè©äŸ¡ã·ã¹ãã ãæ¯æŽããåã·ã¹ãã ã®æ©èœã¯ãªããªããŸãã eval
ãšåã·ã¹ãã ã®äž¡æ¹ãæã€èšèªã¯ã eval
䜿çšããããã³ã«åå®å
šæ§ãæŸæ£ããªããã°ãªããŸããã
äžéšã®èšèªã«ã¯ããªãã·ã§ã³ã®å
¥åãŸãã¯æ®µéçãªå
¥åããããŸããããã©ã«ãã§ã¯åçã§ãããããã€ãã®éçæ³šéã远å ã§ããŸãã Pythonã¯æè¿ããªãã·ã§ã³ã®åã远å ããŸããã TypeScriptã¯ããªãã·ã§ã³ã®ã¿ã€ããæã€JavaScriptã¢ãã€ã³ã§ãã ãããŒã¯ãå€ãè¯ãJavaScriptã³ãŒãã®éçåæãå®è¡ããŸãã
ãããã®èšèªã¯éçåä»ãã®å©ç¹ã®äžéšãæäŸããŸãããçã®éçèšèªã®ããã«çµ¶å¯Ÿçãªä¿èšŒãäžããããšã¯ãããŸããã äžéšã®é¢æ°ã¯éçã«åä»ããããäžéšã¯åçã«åä»ããããŸãã ããã°ã©ããŒã¯åžžã«éããç¥ããæ³šæããå¿
èŠããããŸãã
éçã«åæå®ãããã³ãŒãã®ã³ã³ãã€ã«
éçã«åæå®ãããã³ãŒããã³ã³ãã€ã«ãããšããã³ã³ãã€ã©ãšåæ§ã«ãæåã«æ§æããã§ãã¯ãããŸãã æ¬¡ã«ãã¿ã€ãããã§ãã¯ãããŸãã ããã¯ãæåã¯éçèšèªã1ã€ã®æ§æãšã©ãŒã«ã€ããŠæå¥ãèšãããããä¿®æ£ããåŸã100ã®å
¥åãšã©ãŒã«ã€ããŠæå¥ãèšããããããªãããšãæå³ããŸãã æ§æãšã©ãŒãä¿®æ£ããŠãããããã®100åã®å
¥åãšã©ãŒã¯çºçããŸããã§ããã ã³ã³ãã€ã©ã¯ãæ§æãä¿®æ£ããããŸã§åãšã©ãŒãæ€åºã§ããŸããã§ããã
éåžžãéçèšèªã³ã³ãã€ã©ã¯ãåçèšèªã³ã³ãã€ã©ãããé«éãªã³ãŒããçæã§ããŸãã äŸãã°ãã³ã³ãã€ã©ãŒãadd颿°ãæŽæ°ãåãå
¥ããããšãç¥ã£ãŠããå Žåãäžå€®åŠçè£
眮ã®ãã€ãã£ãADDåœä»€ã䜿çšã§ããŸãã åçèšèªã¯ãå®è¡æã«åããã§ãã¯ããåã«å¿ããŠå€ãã®è¿œå 颿°ã®ãããããéžæããŸãïŒæŽæ°ãŸãã¯æµ®åå°æ°ç¹ã远å ããããæååãŸãã¯ãªã¹ãã远å ããŸããïŒïŒãŸãã¯ããšã©ãŒãçºçããåãäžèŽããªãããšã決å®ããå¿
èŠããããŸãã ããããã¹ãŠã®ãã§ãã¯ã«ã¯æéãããããŸãã åçèšèªã§ã¯ãåã«é¢ããå¿
èŠãªæ
å ±ããã¹ãŠåãåã£ãåŸãå®è¡æã«ã³ãŒããåã³ã³ãã€ã«ãããJITã³ã³ãã€ã«ïŒãžã£ã¹ãã€ã³ã¿ã€ã ïŒãªã©ãæé©åã®ããã«ããŸããŸãªããªãã¯ã䜿çšãããŸãã ãã ããRustãªã©ã®èšèªã§é©åã«èšè¿°ãããéçã³ãŒãã®é床ã«å¹æµããåçèšèªã¯ãããŸããã
éçããã³åçã¿ã€ãã®åŒæ°
éçåã·ã¹ãã ã®æ¯æè
ã¯ãåã·ã¹ãã ããªããšãåçŽãªãšã©ãŒãæ¬çªç°å¢ã§åé¡ãåŒãèµ·ããå¯èœæ§ãããããšãææããŠããŸãã ãã¡ããããã¯äºå®ã§ãã åçèšèªã䜿çšããããšããã人ã¯ããããèªåã§çµéšããŠããŸãã
åçèšèªã®æ¯æè
ã¯ããã®ãããªèšèªã§ã³ãŒããæžãæ¹ãç°¡åã ãšææããŸãã ããã¯ã eval
ã䜿çšããã³ãŒããªã©ãç§ãã¡ãæã
æžãããçš®ã®ã³ãŒãã«ã¯ééããªãåœãŠã¯ãŸããŸãã ããã¯ã宿çãªäœæ¥ã§ã¯ç©è°ãéžã決å®ã§ããããç°¡åããšããææ§ãªèšèãæãåºãã®ã¯çã«ããªã£ãŠããŸãã ãªããã»ããããŒã¯ ããç°¡åããšããèšèãšããç°¡åããšããèšèãšã®ã€ãªããã«ã€ããŠããèªããŸãã ã ãã®ã¬ããŒããèŠããšããç°¡åããšããèšèãæ£ãã䜿çšããããšã¯å®¹æã§ã¯ãªãããšãçè§£ã§ããŸãã ã軜ããã«æ³šæããŠãã ããã
éçããã³åçã¿ã€ãã³ã°ã·ã¹ãã ã®é·æãšçæã¯ãŸã ååã«çè§£ãããŠããŸããããèšèªãšè§£æ±ºãããç¹å®ã®åé¡ã«ç¢ºå®ã«äŸåããŠããŸãã
JavaScriptã¯ãç¡æå³ãªå€æïŒãa1 "a" + 1
ãäžãããaã "a" + 1
ãªã©ïŒãæå³ããå Žåã§ããåäœãç¶ç¶ããããšããŸãã Pythonã¯ã "a" + 1
å Žåã®ããã«ãä¿å®çã«ãªãããšã©ãŒãè¿ãããšããããããŸãã
ã»ãã¥ãªãã£ã¬ãã«ãç°ãªãããŸããŸãªã¢ãããŒãããããŸãããPythonãšJavaScriptã¯ã©ã¡ããåçã«åä»ããããèšèªã§ãã
Cã¯ãããã°ã©ããŒãã¡ã¢ãªå
ã®ä»»æã®å ŽæããããŒã¿ãèªã¿åããããã«ããããããã°ã©ã ã®ã¯ã©ãã·ã¥ã«ã€ãªããæå³ããªããŠããããã¿ã€ãã®å€ãå¥ã®ã¿ã€ãã§ãããšæ³åã§ããããã«ããŸãã
Haskellã§ã¯ãããã®åã«æç€ºçãªå€æãªãã«æŽæ°ãšæµ®åå°æ°ç¹æ°ã远å ããããšã¯ã§ããŸããã CãšHaskellã¯ã©ã¡ããéçã«åä»ããããŠããŸããããã®ãããªå€§ããªéãã¯ãããŸãã
åçèšèªãšéçèšèªã«ã¯å€ãã®ããªãšãŒã·ã§ã³ããããŸãã ãXã«é¢ããŠã¯éçèšèªã¯åçèšèªãããåªããŠããããšãã圢åŒã®ç¡æ¡ä»¶ã®ã¹ããŒãã¡ã³ãã¯ãã»ãšãã©ãã³ã»ã³ã¹ã§ãã ããã¯ç¹å®ã®èšèªã®å Žåã«åœãŠã¯ãŸããããããŸãããããHaskellã¯Xã«é¢ããŠã¯PythonãããåªããŠããããšèšãæ¹ãè¯ãã§ãããã
ããŸããŸãªéçåä»ãã·ã¹ãã
éçåä»ãèšèªã®2ã€ã®æåãªäŸãèŠãŠã¿ãŸãããïŒGoãšHaskellã Goåä»ãã·ã¹ãã ã«ã¯ãä»ã®åã®ããã©ã¡ãŒã¿ãŒããæã€åã¯äžè¬åãããŠããŸããã ããšãã°ãMyListãªã¹ãçšã«ç¬èªã®ã¿ã€ããäœæããå¿
èŠãªããŒã¿ãä¿åã§ããŸãã MyListã®ãœãŒã¹ã³ãŒãã倿Žããã«ãMyListæŽæ°ãMyListæååãªã©ãäœæã§ããããã«ããããšèããŠããŸãã ã³ã³ãã€ã©ãŒã¯ã次ã®åé¡ã«åŸãå¿
èŠããããŸããæŽæ°ã®MyListãããã誀ã£ãŠããã«è¡ã远å ããå Žåãã³ã³ãã€ã©ãŒã¯ããã°ã©ã ãæåŠããå¿
èŠããããŸãã
Goã¯ãMyListãªã©ã®ã¿ã€ããèšå®ã§ããªãããã«ç¹å¥ã«èšèšãããŸããã ã§ããæåã®ããšã¯ãMyListã®ã空ã®ã€ã³ã¿ãŒãã§ã€ã¹ããäœæããããšã§ããMyListã«ã¯ãªããžã§ã¯ããå«ããããšãã§ããŸãããã³ã³ãã€ã©ã¯ãã®ã¿ã€ããèªèããŸããã MyListãããªããžã§ã¯ããååŸãããšãã¯ãã³ã³ãã€ã©ãŒã«åãäŒããå¿
èŠããããŸãã ãã©ã€ã³ãååŸããŸããããšèšã£ãŠããå®éã«ã¯å€ãæ°å€ã§ããå Žåãåçèšèªã®å Žåã®ããã«ãããã©ãŒãã³ã¹ãšã©ãŒãçºçããŸãã
Goã«ã¯ãææ°ã®éçåä»ãèšèªïŒãŸãã¯1970幎代ã®äžéšã®ã·ã¹ãã ïŒã«ååšããä»ã®å€ãã®æ©èœããããŸããã Goã®äœæè
ã«ã¯ããããã®æ±ºå®ã«å¯Ÿããç¬èªã®çç±ããããŸãããããã®åé¡ã«é¢ããå€éšã®äººã
ã®æèŠã¯ãæã«ã¯å³ããèãããå ŽåããããŸãã
ããã§ã¯ãéåžžã«åŒ·åãªåã·ã¹ãã ãæã€Hasââkellãšæ¯èŒããŸãããã ã¿ã€ããMyListã«èšå®ãããšããæ°åã®ãªã¹ããã®ã¿ã€ãã¯MyList Integer
ãŸãã Haskellã¯ã誀ã£ãŠãªã¹ãã«æååã远å ããããããªã¹ãã®é
ç®ãæåå倿°ã«å
¥ããªãããã«ããŠããŸãã
Haskellã¯ãããè€éãªã¢ã€ãã¢ãåã§çŽæ¥è¡šçŸã§ããŸãã ããšãã°ã Num a => MyList a
ã¯ããåãã¿ã€ãã®æ°åã®MyListå€ããæå³ããŸãã æŽæ°ãæµ®åå°æ°ç¹æ°ããŸãã¯åºå®ç²ŸåºŠã®10鲿°ã®ãªã¹ããæå®ã§ããŸãããã³ã³ãã€ã«äžã«ãã§ãã¯ãããæååã®ãªã¹ãã«ãªãããšã¯ãããŸããã
ä»»æã®æ°å€ã¿ã€ãã§æ©èœãã远å 颿°ãäœæã§ããŸãã ãã®é¢æ°ã®åã¯Num a => (a -> a -> a)
ã§ãã ããã¯æ¬¡ã®ããšãæå³ããŸãã
a
ã¯ä»»æã®æ°å€ã¿ã€ããæå®ã§ããŸãïŒ Num a =>
ïŒã- ãã®é¢æ°ã¯ãã¿ã€ã
a
2ã€ã®åŒæ°ãåãa
ã¿ã€ãa
ïŒa- a -> a -> a
ïŒãè¿ããŸãã
æåŸã®äŸã 颿°ã®åãString -> String
å Žåãæååãåãåããæååãè¿ããŸãã ãã ãã String -> IO String
å Žåãäœããã®å
¥å/åºåãè¡ããŸãã ããã¯ããã£ã¹ã¯ããããã¯ãŒã¯ãžã®ã¢ã¯ã»ã¹ã端æ«ããã®èªã¿åããªã©ã§ãã
åã®é¢æ°ã«IO ããªãå ŽåãI / Oæäœãå®è¡ããªãããšãããããŸãã ããšãã°ãWebã¢ããªã±ãŒã·ã§ã³ã§ã¯ã颿°ã®çš®é¡ã調ã¹ãã ãã§ã颿°ãããŒã¿ããŒã¹ã倿Žãããã©ãããçè§£ã§ããŸãã ãããè¡ãã«ã¯ãåçèšèªãéçèšèªãã»ãšãã©ãããŸããã ããã¯ãæã匷åãªã¿ã€ãã³ã°ã·ã¹ãã ãåããèšèªã®æ©èœã§ãã
ã»ãšãã©ã®èšèªã§ã¯ã颿°ãšããããåŒã³åºããããã¹ãŠã®é¢æ°ãªã©ãåŠçããŠãããŒã¿ããŒã¹ã倿ŽããäœããèŠã€ããããšããå¿
èŠããããŸãã ããã¯ãééããç¯ããããéå±ãªããã»ã¹ã§ãã ãããŠãHaskellåã·ã¹ãã ã¯ãã®è³ªåã«ç°¡åãã€ç¢ºå®ã«çããããšãã§ããŸãã
ãã®åãGoãšæ¯èŒããŠãã ãããGoã¯MyListã®åçŽãªã¢ã€ãã¢ã衚çŸããããšãã§ãããã2ã€ã®åŒæ°ãåãããããã¯äž¡æ¹ãšãæ°å€ã§åãã¿ã€ãã§ãå
¥åºåãè¡ã颿°ãã¯èšããŸã§ããããŸããã
Goã¢ãããŒãã䜿çšãããšãGoã§ããã°ã©ãã³ã°ããããã®ããŒã«ãç°¡åã«äœæã§ããŸãïŒç¹ã«ãã³ã³ãã€ã©ã®å®è£
ã¯ç°¡åã§ãïŒã ããã«ãå¿
èŠãªæŠå¿µãå°ãªããªããŸãã ãããã®å©ç¹ãéèŠãªå¶éã«ã©ã®ããã«å¹æµãããã¯ã䞻芳çãªåé¡ã§ãã ãã ããHaskellã¯GoãããåŠç¿ãé£ãããHaskellã®åã·ã¹ãã ã¯ã¯ããã«åŒ·åã§ãããHaskellã¯ã³ã³ãã€ã«æã«ããã«å€ãã®çš®é¡ã®ãã°ãé²ãããšãã§ãããšäž»åŒµããããšã¯ã§ããŸããã
GoãšHaskellã¯éåžžã«ç°ãªãèšèªã§ãããããçšèªãæ£ãã䜿çšãããŠããŠãããéçèšèªãã®1ã€ã®ã¯ã©ã¹ã«ã°ã«ãŒãåãããšèª€è§£ãæãå¯èœæ§ããããŸãã å®çšçãªã»ãã¥ãªãã£äžã®å©ç¹ãæ¯èŒãããšãGoã¯Haskellãããåçèšèªã«è¿ãã§ãã
äžæ¹ãäžéšã®åçèšèªã¯ãäžéšã®éçèšèªãããå®å
šã§ãã ïŒPythonã¯äžè¬ã«Cãããå®å
šã§ãããšèããããŠããŸãïŒã éçãŸãã¯åçèšèªãã°ã«ãŒããšããŠäžè¬åããå Žåãèšèªéã®èšå€§ãªæ°ã®éããå¿ããªãã§ãã ããã
ã¿ã€ãã³ã°ã·ã¹ãã æ©èœã®éãã®å
·äœäŸ
ãã匷åãªã¿ã€ãã³ã°ã·ã¹ãã ã§ã¯ãããäœãã¬ãã«ã§å¶éãæå®ã§ããŸãã 以äžã«ããã€ãäŸã瀺ããŸãããæ§æããããŸããªå Žåã¯ããããã«ãã ãããªãã§ãã ããã
Goã§ã¯ããadd颿°ã¯2ã€ã®æŽæ°ãåããæŽæ°ãè¿ããŸãããšèšãããšãã§ããŸãã
func add(x int, y int) int { return x + y }
Haskellã§ã¯ãã颿°ã¯ä»»æã®æ°å€åãåããåãåã®æ°å€ãè¿ããŸãããšèšãããšãã§ããŸãã
f :: Num a => a -> a -> a add xy = x + y
Idrisã§ã¯ãã颿°ã¯2ã€ã®æŽæ°ãåããæŽæ°ãè¿ããŸãããæåã®åŒæ°ã¯2çªç®ã®åŒæ°ããå°ãããªããã°ãªããŸããããšèšãããšãã§ããŸãã
add : (x : Nat) -> (y : Nat) -> {auto smaller : LT xy} -> Nat add xy = x + y
æåã®åŒæ°ã2çªç®ã®åŒæ°ããã倧ããadd 2 1
ãåŒã³åºãããšãããšãã³ã³ãã€ã©ãŒã¯ã³ã³ãã€ã«æã«ããã°ã©ã ãæåŠããŸã ã æåã®åŒæ°ã2çªç®ã®åŒæ°ãã倧ããããã°ã©ã ãäœæããããšã¯ã§ããŸããã ãŸããªèšèªã«ã¯ãã®æ©èœããããŸãã ã»ãšãã©ã®èšèªã§ã¯ããã®ãã§ãã¯ã¯å®è¡æã«è¡ãããŸãif x >= y: raise SomeError()
ããã«èšè¿°ããŸãã
Haskellã«ã¯ãäžèšã®Idrisã®äŸã®ãããªåã«çžåœãããã®ã¯ãªããGoã«ã¯Haskellã®äŸãŸãã¯Idrisã®äŸã«çžåœãããã®ã¯ãããŸããã , Idris , Haskell, Haskell , Go. , .
. , . . , .
- C (1972), Go (2009) : , . MyList, " ", " " .. " ". " " , , .
- Java (1995), C# (2000) : ,
MyList<String>
, . String, , . - Haskell (1990), Rust (2010), Swift (2014) : , , (ADTs), - ( , (traits) , ). Rust Swift , Haskell, (Mozilla Apple, ).
- Agda (2007), Idris (2011) : , ", y, y , x". "y , x" . y x, . , . , .
, , . â Go, , .
(Java C#) â , .
, Mozilla (Rust) Apple (Swift).
(Idris and Agda) , . .