Haskellã®ãã¡ã³ã³ãã¥ããã£ã§ã¯ããã¹ãŠã®Haskellããã°ã©ããŒããã¬ãŒãã³ã°äžã«1ã€ä»¥äžã®ã¢ããã¬ã€ããäœæããå¿ èŠããããšããåè«ã§ããã ãããŠç§ãäŸå€ã§ã¯ãããŸããã ããããç§ã¯ãã®ãããã¯ã«é¢ããã¬ã€ããããããããããšãç¥ã£ãŠããŸãããããã®å€ãã¯è¯ãã§ã-ãªãå¥ã®ã¬ã€ããæžãã¹ãã§ããïŒ 2ã€ã®çç±ïŒ
- ç§ãèŠãä»ã®å€ãã®ããã¥ã¢ã«ããããã¢ããã®ããã€ãã®åŽé¢ã説æã§ãããšæããŸãã
- ç§ã¯ã¢ãããä»ããããã£ãšããç解ãå§ããŸããããããŠå¯èœãªéãå ±æããããšæããŸãã
åææ¡ä»¶
Haskellã§äŸãæžãã®ã§ãèªè ã®çããã¯ãããªã¢ãŒãã£ãºã ãåã¯ã©ã¹ãªã©ã®ãããã¯ãå«ããŠããããç¥ãããšã圹ç«ã€ã§ãããã ãã®ç¥èããªããã°ãè³æãç解ããã®ã¯å°é£ã§ãã äœåãã®Haskellå ¥éã¬ã€ãããã§ã«æžãããŠããŸãããããã¯æºåã®ã§ããŠããªãèªè ã«èªã䟡å€ãããããããã®èšäºã®ã·ãªãŒãºã«æ»ããŸãã
ããããã¢ããã®çè«ãïŒãã®èšäºã®èŠ³ç¹ããïŒèšè¿°ããŠããã«ãããããããæ°åŠã®éåžžã«æœè±¡çãªåå²ã§ããã«ããŽãªãŒã®çè«ãç¥ãå¿ èŠã¯ãããŸããã ãã¡ãããã«ããŽãªãŒçè«ã®ç¥èã¯å®³ã«ã¯ãªããŸããããæ瀺ãããè³æãç解ããå¿ èŠã¯ãããŸããã ç§ã¯ãããã°ã©ãã³ã°èšèªã«é©çšãããã¢ãããåŠç¿ããåã«ã«ããŽãªãŒçè«ãå¿ èŠã ãšèšã人ãä¿¡ããŠããŸãã-ããã¯ããã§ã¯ãããŸããã ããªãããããç 究ããå Žåãããã¯è¯ãããšã§ãããããããçšèªã䜿çšããããšã®å©ç¹ãããããŸããã
ã®æåŠ...
次ã®2ã€ã®çç±ã§ãã¢ããã®äžçã«ãããã¹ãŠãæããããšã¯æããŸããã 1ã€ç®ã¯éåžžã«é·ãæéã§ããã2ã€ç®ã¯ãã¹ãŠãããããªãããããããã決ããŠããããŸããã çŽç²ãªæŠå¿µã¬ãã«ã§ã®ã¢ããã®ç解ãããããæçšã§ããçç±ããããã®æäœæ¹æ³ãããã³æãäžè¬çã«äœ¿çšãããäžè¬çãªã¢ãããæäŸããããšæããŸãã ãã®äžé£ã®èšäºã®æåŸã«ãããªã³ã¯ãããã¢ãããããæ·±ãåŠã¶ããšãã§ããŸãã
æ¯æ¥ã®ä»äºã§ããã«äœ¿çšã§ãã倧éã®ã³ãŒããæåŸ ããªãã§ãã ããã ããã¯ãã¬ã·ãããã¯ãã§ã¯ãããŸããïŒ ã¢ããã䜿çšããŠããã°ã©ã ãäœæãããšã©ããªãããç解ããå¿ èŠããããšæ¬åœã«ä¿¡ããŠããŸãããã®ã¬ã€ãã¯ã¢ããã詳现ã«èª¬æããããã«æžãããŠããŸãã ããã«å ããŠãä»ã®ããã¥ã¢ã«ïŒãªã³ã¯ãåç §ïŒãèªãã§å®çšçãªåé¡ã«å¯Ÿããæè¯ã®ã¢ããã®è§£æ±ºçãèŠã€ããããšãã§ããŸããç§ã®ç®æšã¯ãå šäœåãæŠèª¬ããã¢ãããšãã®äœæ¥ãæ¬åœã«ç解ã§ããããã«ããããšã§ãã
æåŸã«ãç§ã¯ããªããç§ã«èšãããããšãå®å šã«ç解ããŠã»ããã®ã§ã圌ããããªãã«åãã£ãŠå«ã¶ãŸã§äž»ãªèããç¹°ãè¿ããŠç¹°ãè¿ãããšãããªãã«éç¥ããŠããŸãã ã¢ããã¯ããã€ãã®æç« ã§èª¬æã§ããªãã®ã§ãããã¯éå±ã§ã¯ãªãããšãé¡ã£ãŠããŸãã èªåã§ã³ãŒããŒã飲ã¿ãæ€ åãå¿«é©ã§ããããšã確èªããŠãã ãã-ç解ã«ã¯æéãããããŸãã
åæ©ïŒã¢ããã«ã€ããŠèããå¿ èŠãããã®ã¯ãªãã§ããïŒ
ç§ã®ç¥ãéããæåã®ã¢ããã¯Haskellã§äœ¿çšãããEugenio MoggiãšPhilip WadlerïŒç§ã¯æ¯èŒã§ããªã2ã€ã®å·šäººïŒã®ä»äºã«åºã¥ããŠããŸãã ãã以æ¥ããããã¯ä»ã®èšèªãç¹ã«æ©èœçãªèšèªã§ç»å ŽããŸããã ãããããªãèªè ïŒããããé¢æ°åããã°ã©ãã³ã°ã®è¬ãè©Šããããšã®ãªãããã°ã©ããŒïŒãã¢ãããå¿é ããå¿ èŠãããã®ã§ããããïŒ
é¢æ°åããã°ã©ãã³ã°ã®äž»ãªèãæ¹ã¯ã çŽç²ãªé¢æ°ãã§ããã ãåºã䜿çšããããšã§ãã çŽç²ãªé¢æ°ã¯ãã©ãã¯ããã¯ã¹ã§ãã 圌女ãããŠããããšã¯ã1ã€ä»¥äžã®åŒæ°ãåããäœããèšç®ããçµæãè¿ãããšã ãã§ãã 圌女ã¯å¯äœçšããããŸãã ã ãã¡ã€ã«ãšãœã±ãããžã®èªã¿åã/æžã蟌ã¿ãã³ã³ãœãŒã«ãžã®åºåãã°ããŒãã«å€æ°ãžã®å€æŽãäŸå€åŠçãªã©ã¯ãããŸããã ããã§ã®å©ç¹ã¯ãçŽç²ãªé¢æ°ã®åäœãå³å¯ã«å®çŸ©ãããŠããããšã§ãã åžžã«åãåŒæ°ã«åãå€ãè¿ããŸãã çŽç²ãªé¢æ°ã¯ãããäºæž¬å¯èœã§ããã¹ããç°¡åã§ããšã©ãŒãçºçãã«ãããã®ã§ãã ïŒ{1}ïŒæ¯èŒã®ããã«ãuncleané¢æ°ïŒå¯äœçšããããŸãïŒã¯ãããã€ãã®åäžã®åŒã³åºãã«å¯ŸããŠå¿ ãããåãçµæãèšç®ããŸããã ããšãã°ãé¢é£ããã°ããŒãã«å€æ°ã®å€ãå€æŽãããå ŽåããŸãã¯èªã¿åããããã¡ã€ã«ã®å 容ãç°ãªãå Žåãåçãç°ãªãå ŽåããããŸãã äžçŽãªé¢æ°ã¯ãã¹ããé£ãããå€ãã®ãšã©ãŒãçºçãããããé¢æ°ã倱æããå€ãã®ç¶æ³ããããŸãã ãããã®çç±ãããé¢æ°åããã°ã©ãã³ã°èšèªã§ã¯ãå¯èœãªéãçŽç²ãªé¢æ°ãäœæããããšããå§ãããŸãã
ãã ããçŽç²ãªé¢æ°ã®ããã°ã©ã ã¯å¶éãå€ãããŸãã å¯äœçšã䜿çšããŠããã°ã©ã ãç°¡åã«äœæã§ããå ŽåããããŸãããçŽç²ãªé¢æ°ã§ã®ã¿ïŒèŠçã䌎ãïŒäœæã§ããŸãã ãŸããä»ã®ããã€ãã®ã±ãŒã¹ã§ã¯ãå¯äœçšãªãã§è¡ãããšã¯äžå¯èœã§ãã ããšãã°ããããã©ã«ããŒããå¥ã®ãã©ã«ããŒã«ãã¡ã€ã«ãã³ããŒããããã°ã©ã ã¯ããã¡ã€ã«ã·ã¹ãã ãšããåãããŠå€æŽããŸãã çŽç²ãªé¢æ°ããã¡ã€ã«ã®èªã¿åããšæžã蟌ã¿ãèš±å¯ãããŠããªãå ŽåïŒãããŠãããã¯å¯äœçšã§ãïŒããã®åé¡ã解決ããããšã¯ã§ããŸããã ãããã£ãŠãé¢æ°åèšèªã§ãã£ãŠãå¯äœçšã«å¯ŸåŠããæ¹æ³ãå¿ èŠã§ãã
é¢æ°åèšèªã«ã¯ãçŽç²ãšäžæµã®2ã€ã®ã¿ã€ãããããŸãã äžçŽãªFSïŒSchemeãOCamlïŒã¯ãã®åé¡ãæ°ã«ããŸããïŒå¯äœçšã®ããé¢æ°ãæžãããšãã§ããŸãããããŒãã£FSã®ããã°ã©ããŒã¯éåžžãç¹å¥ãªå¿ èŠãªãã«ãããé¿ããŸãã çŽç²ãªFYïŒHaskellãªã©ïŒã¯ããããŒãã³ã¢ã§ããéåžžãå¯äœçšã䌎ãé¢æ°ã®çŽæ¥çãªæžã蟌ã¿ãçŠæ¢ããŸãïŒãçŽæ¥ããšæžããçç±ãããã«ããããŸãïŒã ãããã£ãŠããæ³åã®ãšãããçŽç²ãªããã°ã©ãã³ã°èšèªã®å¯äœçšã®ãããã¯ã¯ãé·ãéç 究ã®äž»ãªåéã®1ã€ã§ããã
ã¢ããã¯ãã®åé¡ã解決ããéµã§ããããšãå€æããŸããã ïŒããæ£ç¢ºã«ã¯ãããŒã®1ã€ãä»ã®ã¢ãããŒãã¯ä»ã®FYã§çºæãããŠããŸãããªãã·ã§ã³ãšããŠãCleanã®äžææ§ã¿ã€ãããïŒã¢ããã䜿çšãããšãèšèªã®çŽåºŠã«éåããããšãªãå¯äœçšã®ããèšç®ã䜿çšã§ããŸãã ã¢ãããšåã·ã¹ãã ã䜿çšãããšãå¯äœçšã®ããèšç®ãä»ã®èšç®ããåé¢ããããšãã§ããçžäºã«å¹²æžããŸããã å¯äœçšãªãã«ã³ãŒãã®ãã¹ãŠã®å©ç¹ãåŸãããããã«ããåã·ã¹ãã ãä¿èšŒãããŸãã åæã«ãå¿ èŠã«å¿ããŠå¯äœçšãå®è¡ã§ããŸãã ãããŠãããã¯éåžžã«åŒ·åãªæŠå¿µã§ãã
ãããŠãããã§ååã§ã¯ãªããã®ããã«ãã¢ããã«ã¯å¯äœçšãæããã ãã§ãªããä»ã«ãå€ãã®çšéãããããšãããããŸããã ã¢ããã¯éåžžã«çšéã®åºãããŒã«ã§ãããããã䜿çšãããšãééçãªåäœã§ããŸããŸãªã¿ã€ãã®èšç®ãæŽçã§ããŸãã äžéšã®ããã°ã©ã ã¯å€§å¹ ã«ç°¡çŽ åãããŠããŸãã å€ãã®å Žåãã¢ããã³ãŒãã¯ãéã¢ããã³ãŒããããçããç解ããããã§ãã ãã®çŸè±¡ã®äŸãåæããŸãã äžè¬ã«ãã¢ããã¯é¢æ°åèšèªã®å¯äœçšä»¥å€ã§ãæçšã§ãã
ã¢ããã¯ãããã°ã©ãã³ã°èšèªã®çè«ã«ãããçŽ æŽãããã¢ã€ãã¢ã®1ã€ã§ãããæ¢çŽ¢ãã䟡å€ããããŸãã
å®çŸ©ïŒã¢ãããšã¯äœã§ããïŒ
ã¢ããã¯ãé¢æ°ãé¢æ°ã®é©çšãããã³é¢æ°ã®æ§æã«å¯Ÿããäžè¬åã§ãããæšæºã®é¢æ°ãšæ¯èŒããŠèšç®ã®æŠå¿µãæœè±¡åãããŠããŸãã
ãã®éçšã§ãç§ã¯ããªãã«ã¢ããèªäœãšããããã©ã®ããã«æ©èœãããã ãã§ãªãããªã圌ãã以åã«äŒã£ãããšã®ãªãããã°ã©ããèœèãããã®ãã説æããããšæã£ãŠããŸãã ïŒãã³ãïŒããã¯ãããã°ã©ããŒãååã«è³¢ããªãããã«ããŽãªãŒçè«ãç¥ããªãããã§ã¯ãããŸãããïŒ
ã³ã³ãã¥ãŒãã£ã³ã°ã®æŠå¿µ
ããŠããã³ã³ãã¥ãŒãã£ã³ã°ã®æŠå¿µããšããè¡šçŸããå®çŸ©ã®åæãå§ããŸãããã
æãåçŽã§æãäºæž¬å¯èœãªèšç®ã¯ãéåžžã®ïŒçŽç²ãªïŒé¢æ°ïŒã€ãŸããé¢æ°ã®æ°åŠçãªå®çŸ©ïŒã§ãã ç°¡åã«ããããã«ã1ã€ã®å ¥ååŒæ°ã1ã€ã®åºåã«ãããããé¢æ°ãèããŸãã ïŒ ã«ãªãŒåæé ã䜿çšããŠãè€æ°ã®åŒæ°ãæã€é¢æ°ã1ã€ã®åŒæ°ãæã€é¢æ°ã«æžããããšãã§ããŸããããã«ã€ããŠã¯åŸã§è©³ãã説æããå¿ èŠããããŸãã ïŒ åžžã«åãçµæãåãå ¥åãã©ã¡ãŒã¿ãŒã«è¿ãå¿ èŠããããŸãã Haskellã®ãããªåŒ·ãåä»ããããèšèªã§ã¯ãé¢æ°ã«ã¯åå®çŸ©ããããŸããã€ãŸããåaãšbã®å Žåãé¢æ°ã¯åaã®å€ãåbã®å€ã«ãããããŸãã Haskellã§ã¯æ¬¡ã®ããã«è¡šç€ºãããŸãã
f :: a- > b
ããã§ãäºéã³ãã³ã::ãã¯ã次ã®ã¿ã€ããæã€ãããšãæå³ããŸãã ãããã£ãŠãé¢æ°fã®æ©èœã¿ã€ãã¯a-> bã§ããããã¯ãé¢æ°ãã¿ã€ãaã®å€ãåããã¿ã€ãbã®å€ãè¿ãããšãæå³ããŸãã å®éã«ã¯ãaãšbã¯éåžžãå ·äœçãªåïŒIntãFloatãString ...ïŒãæã£ãŠããŸãããHaskellã§ã¯ãé¢æ°ã¯åŒæ°ã®åã«é¢ä¿ãªãæ©èœããŸãã ïŒ{3}ïŒ
ãããã£ãŠãçŽç²ãªé¢æ°ã¯æãåçŽãªãèšç®ã®æŠå¿µãã§ãã ãããŠãã©ã®ãããªèšç®ããŸã ååšããŸããïŒ ãããã®å€ãããããããªãã¯å€ãã«ç²ŸéããŠããŸãã ããã«ã¯æ¬¡ã®èšç®ãå«ãŸããŸãã
- å ¥å/åºåïŒãã¡ã€ã«ãã³ã³ãœãŒã«ïŒãæäœããŸãã
- äŸå€ãåŒãèµ·ãã;
- äžè¬çãªç¶æ ïŒã°ããŒãã«ãããŒã«ã«ïŒãå€æŽããŸãã
- æã ãããã¯å€±æãããããããŸããã
- äžåºŠã«å€ãã®çµæãè¿ããŸãã
- ãã®ä»å€æ°ã
éç¥ïŒãã¡ã€ã«ãŸãã¯ã³ã³ãœãŒã«ãæäœãããšãã®å ¥å/åºåãæå³ããããã«ããå ¥å/åºåããŸãã¯ç¥ããŠI / Oãšãããã¬ãŒãºã䜿çšããŸããã I / Oæäœã¯å¯äœçšãããããããšãç¥ãããŠããŸãã I / Oæäœãé¢æ°ã®å ¥åºåå€ãšæ··åããªãã§ãã ããã
ãããã®èšç®ãéåžžã®ããã°ã©ãã³ã°èšèªïŒCãŸãã¯JavaïŒã§ã©ã®ããã«äœ¿çšãããã«ã€ããŠãã1ã€èããŠãã ããã å ¥åºåæäœã®èšç®ïŒ åé¡ãããŸããïŒ Cããã³Javaã®ä»»æã®æ©èœã äŸå€ã®åŒã³åºãã¯ã©ãã§ããïŒ Cã§ã¯ãäŸå€ã®èšèªãµããŒãããªããããããã¯å°ãè€éã§ãããé害ãçºçããå Žåã«ãšã©ãŒã³ãŒããè¿ãããšãã§ããŸãã ïŒãŸãã¯ãçµéšè±å¯ãªäœã¬ãã«ã®ããã°ã©ããŒã§ããã°ãäžè¬ã«setjmp / longjmpã§ãšã©ãŒãåŠçã§ããŸããïŒJavaã§ã¯ãã©ããã§åŠçãããããšãæåŸ ããŠãåã«äŸå€ãã¹ããŒããŸãã äŸå€ã«å ããŠããŸã æ¡ä»¶ããããŸã-ãããã©ã®ããã«æ±ããïŒ ã¯ããäžè¬çã«ã¯ç°¡åã§ããCããã³Javaã§ã¯ãã°ããŒãã«ããã³ããŒã«ã«ã®å€æ°ãããŸããŸãªæ¹æ³ã§èªã¿æžãã§ããŸãã ãããŠã倱æãããããããªãèšç®ïŒ ãããã¯äŸå€ã®éåããã±ãŒã¹ãšèŠãªãããšãã§ããã®ã§ããã¯ãåé¡ã¯ãããŸããã æåŸã«ãå€ãã®å€ãè¿ãèšç®ã«ã€ããŠã¯ã©ãã§ããããïŒ ããã§ãå€æ°ã®å€ãšã¯ãå€æ°ã®çµæãå«ã1ã€ã®ãªããžã§ã¯ãã§ã¯ãªããCæ§é äœãJavaãªããžã§ã¯ãã§ã¯ãªããè€æ°ã®å¥åã®çµæãã䞊åã«ãè¿ãããšãã§ããé¢æ°ã®ããšã§ãã CãŸãã¯Javaã§ãããè¡ãæ¹æ³ã¯å®å šã«ã¯æããã§ã¯ãããŸããã ïŒ{4}ïŒ
次ã®ç¹ã«æ³šæããããšãéèŠã§ãããã¹ãŠã®å Žåã«ãããŠãåŸæ¥ã®ã³ã³ãã¥ãŒãã£ã³ã°ã®æŠå¿µã«ã€ããŠã¯ãã話ããŠããŸãããå ¥åãã©ã¡ãŒã¿ããåºåãžã®éåžžã®ãããã³ã°ã«å ããŠããã©ãããããäœãããçºçããããã§ãã ããã«ãã³ã³ãã¥ãŒãã£ã³ã°ã®ç¬èªã®ã³ã³ã»ãããæã€ä»ã®ã¿ã€ãã®ãä»ã®äœããããããŸãã éåžžãããã°ã©ã ãäœæãããšãã«ããã«ã€ããŠå¿é ããããšã¯ãããŸããã ãé¢æ°ãã¯æ°åŠçãªæå³ã§ã®é¢æ°ãšãŸã£ããåãã§ã¯ãªãããšãç解ããŠããŸãã çµå±ã®ãšãããå ¥å/åºåãäŸå€ãã°ããŒãã«å€æ°ã®å€æŽãªã©ã®å¯äœçšããããŸãã ã»ãšãã©ã®ããã°ã©ããŒã«ãšã£ãŠãããã¯éèŠã§ã¯ãããŸãããã°ããŒãã«å€æ°ã®å€æŽã«ããäžå¿«ãªãšã©ãŒããã£ãããããŸã§ãããã°ã©ã ãäŸå€ã§çªç¶åæ¢ãããŸã§ããŸãã¯ããããã¹ãŠã®éæ©èœçæ§è³ªã«ãã£ãŠåŒãèµ·ããããä»ã®åé¡ãçºçãããŸã§ãæ©èœãã ãããã£ãŠãã§ããã ãçŽç²ãªé¢æ°ã䜿çšããããšæããŸãã ããããšæããŸããããããäžå¯èœãªå Žåãããããäœãä»ã®ããšããã€ãŸãå¯äœçšã䌎ãèšç®ãè¡ãå¿ èŠããããŸãã
çµè«ã¯1ã€ã ãã§ãã2ã€ã®æ€ åã«åº§ãããã§ãã ïŒ{5}ïŒå¯èœãªéãçŽç²ãªé¢æ°ã§ã³ãŒããèšè¿°ããããã®ãã¹ãŠã®å©ç¹ãåŸãŸãïŒãããã°ãæ€èšŒã容æã«ããŸã...ãããããã®ãäœãããå¶åŸ¡ãããæ¹æ³ã§åŠçããããšæããŸããç¹å®ã®ç¶æ³ã§ã¯ãåºå£ãããããããè¯ãã§ãã ãããŠããããã¢ãããç§ãã¡ã«èš±ããŠããããšã§ãã
ãããïŒ æåŸã®æ®µèœã®ããŒãã¬ãŒãºã¯ãå¶åŸ¡ãããæ¹æ³ã§ãã§ãã ãã®ã¡ã«ããºã ãCãŸãã¯Javaã®å Žåãšåãããã«æ©èœããå Žåããã¡ããããããã®éé¢æ°åèšç®ã®å€ãã䜿çšããŠåé¡ã解決ããŸãããé¢æ°åããã°ã©ãã³ã°ã®å©ç¹ã倱ããŸãã çµå±ã®ãšãããé¢æ°ãã¯ãªãŒã³ã§ããããšãä¿èšŒãããã®ã§ã¯ãªããããã§ã¯åãã§ãã¯ã圹ã«ç«ããªãã§ãããã ã³ã³ãã¥ãŒãã£ã³ã°ã®ä»ã®æŠå¿µãšé£æºããããã®ããçš®ã®äœç³»çãªã¢ãããŒããå¿ èŠã§ããããã¯ãã³ãŒãã®çŽåºŠã«éåããŸããã
次ã«ãïŒçŽç²ãªïŒé¢æ°ãïŒçŽç²ãªïŒé¢æ°ã®é©çšãããã³ïŒçŽç²ãªïŒé¢æ°ã®åæã®æçšãªæŠå¿µãæ€èšããåãç®æšãå®è£ ããã¢ããæ³ãšæ¯èŒããŸãã
æ©èœãæ©èœã®é©çšïŒã¢ããªã±ãŒã·ã§ã³ïŒããã³æ©èœã®æ§æ
以åãHaskellã¯é¢æ°ã®å ¥åããã³åºåãã©ã¡ãŒã¿ãŒã®ã¿ã€ãã決å®ããããã«ç¹å¥ãªãšã³ããªã䜿çšããããšãè¿°ã¹ãŸããã å ¥åã¿ã€ããaã§åºåã¿ã€ããbã®é¢æ°fã®å Žåããšã³ããªã¯æ¬¡ã®ããã«ãªããŸãã
f :: a- > b
ãããã£ãŠãfã®ã¿ã€ãã¯a-> bã§ãïŒãfrom a to bããšèªã¿ãŸãïŒã å ¥åå€ã2åã«ããé¢æ°ã®ããå ·äœçãªäŸã次ã«ç€ºããŸãã
f :: Int- > Int
f x = 2 * x
fã¯æŽæ°åãåããæŽæ°ã2åããŠå¥ã®æŽæ°ãè¿ããããInt-> Intåã§ãã
é¢æ°ã®å®è¡ã¯ç°¡åã§ãããã®ãããåŒæ°ã«é©çšããŸãïŒåŒæ°ã1ã€ãããšä»®å®ããŸãïŒã ããã¯éåžžãé¢æ°ã«åŒæ°ãå²ãåœãŠãããšã§è¡ãããŸãã
f 2- é¢æ°ãf 2ãå€= 4ã
Haskellã§ã¯ãä»ã®å€ãã®ããã°ã©ãã³ã°èšèªã®ããã«ãåŒæ°ãæ¬åŒ§ã§å²ãŸããŠããªãããšã«æ³šæããŠãã ããã
ã«ã¬ãŒ
å®éã«ã¯ãåäžã®åŒæ°é¢æ°ã§ã¯å€ãã®ã¿ã¹ã¯ã«ååã§ã¯ãããŸããã 2ã€ã®åŒæ°ã®é¢æ°ãã©ã®ããã«å®çŸ©ããŸããïŒ ããšãã°ã2ã€ã®æŽæ°åŒæ°ãåãããããã®2ä¹ã®åèšãè¿ãé¢æ°qãäœæããã«ã¯ã©ãããã°ããã§ããïŒ é¢æ°ã®æ¬äœã¯ç°¡åã«èšè¿°ã§ããŸãã
q x y = x * x + y * y
é¢æ°ã¿ã€ãã®çœ²åãçç¥ãããŸããã ãããããããªãã¯ããçš®ã®ãªãã·ã§ã³ãæåŸ ããŠããŸãïŒ
q :: Int Int- > Int
ãŸãã¯ããããããïŒ
q : :ïŒInt ã Int ïŒ -> Int
å®éããã®é¢æ°ã®ã¿ã€ãã¯æ¬¡ã®ããã«ãªããŸãã
q :: Int- > Int- > Int
ç¢å°ã->ãã¯å³çµåãªã®ã§ããšã³ããªã¯æ¬¡ã®ããšãæå³ããŸãã
q :: Int -> ïŒ Int- > Int ïŒ
ä»ã§ã¯é¢çœããã§ãã Haskellã§ã¯1ã€ã®åŒæ°ã®é¢æ°ïŒãã®å Žåã¯xïŒã«ãªã2ã€ã®åŒæ°ã®é¢æ°ã¯ã1ã€ã®åŒæ°ã®å¥ã®é¢æ°ãè¿ãã次ã®åŒæ°ïŒyïŒãåãåã£ãŠçµæãè¿ããŸãã Haskellã§ã¯ãä»ã®FYãšåæ§ã«ãé¢æ°ã¯ä»ã®é¢æ°ã®å€ãšããŠè¿ãããå¯èœæ§ããããããããã¯æ£ããã§ãã ïŒèšãæãããšãé¢æ°ã¯UFã§ã¯åã«ç°ãªãããŒã¿åã§ããïŒãã®ããã«ãè€æ°åŒæ°é¢æ°ãåäžåŒæ°ãšããŠè¡šçŸããæ¹æ³ã¯ã«ãªãŒåãšåŒã°ããŸãïŒHaskell Curryã®ååã¯HaskellãšãåŒã°ããŸããæé ãªã©ãå¿ èŠã«å¿ããŠïŒã æ確ã«ããããã«ãæŽæ°ãè¿ã4ã€ã®æŽæ°åŒæ°wãxãyãããã³zãæã€é¢æ°rã䜿çšããŸãã
r :: Int- > Int- > Int- > Int- > Int
r w x y z = ... ã¯ãwãxãyãããã³zã®é¢æ°ã§ã
å³ç¢å°ã¯æ¬¡ãæäŸããŸãã
r :: Int -> ïŒ Int -> ïŒ Int -> ïŒ Int- > Int ïŒ ïŒ ïŒïŒ
r w x y z = ... ã¯ãwãxãyãããã³zã®é¢æ°ã§ã
ããã§ãrã¯1ã€ã®æŽæ°åŒæ°wã®é¢æ°ã§ãããã¿ã€ãïŒInt->ïŒInt->ïŒInt-> IntïŒïŒïŒã®é¢æ°ãè¿ããŸãã ãã®é¢æ°ã¯ãæŽæ°ïŒãã®äŸã§ã¯xïŒã«é©çšããããšãã¿ã€ãïŒInt->ïŒInt-> IntïŒïŒã®é¢æ°ãè¿ããŸãã 次ã®é¢æ°ã¯ãæŽæ°ïŒäŸã§ã¯yïŒã«é©çšãããåïŒInt-> IntïŒã®é¢æ°ãè¿ããŸããããã¯ãå¥ã®æŽæ°ïŒzïŒã«é©çšããããšãæŽæ°-åŒã³åºãã®çµæïŒrwxyzïŒãè¿ããŸãã ãå®éã«ã¯ãïŒïŒïŒïŒrwïŒxïŒyïŒzïŒã ãããŠãããã¯ã«ã¬ãŒãšåŒã°ããŸãã Haskellã¯èªåçã«é¢æ°ãã«ãªãŒåããŸãã ã«ãªãŒåã¯éåžžã«äŸ¿å©ã§ããåŒæ°ãäžåºŠã«1ã€ãã€æž¡ãããšãã§ããäžåºŠã«ãã¹ãŠãæž¡ãããšã¯ã§ããŸããããŸãããããã®éšåçã«é©çšãããé¢æ°ã¯ãåç¬ã§éåžžã«åœ¹ç«ã€ããšããããããŸãã ãŸããã«ã¬ãŒã¯æŠå¿µçã«ã¯ããããã¯1ã€ã®åŒæ°ã®é¢æ°ã«ã€ããŠèããã ãã§ååã§ããããã以äžã®ããšã¯ãããŸããã ãããïŒ
Haskellã«ã¯ç¹å¥ãª$æŒç®åããããŸããããã¯é¢æ°æŒç®åã§ãã 次ã®ã¿ã€ãããããŸãã
ïŒ $ ïŒ ::ïŒa- > b ïŒ -> a- > b
ïŒHaskellã§ã¯ãèšå·äžçœ®æŒç®åã¯æ¬åŒ§ã§å²ãŸããåãååã®é¢æ°ãšåçã§ãããããã£ãŠãè¡šèšf $ 2ã¯è¡šèšïŒ$ïŒf 2.ãšåçã§ããæŒç®åã¯éåžžã䟿å®äžé¢æ°åœ¢åŒã§å®çŸ©ãããŸããèšèªã®å ¥éè³æãåç §ããŠãã ããã詳现ãç¥ãããå Žåã¯ãããã§æŒç®åã䜿çšããããšããããããŸããïŒ
è¡šèšæ³ã¯ãä»»æã®ã¿ã€ãaããã³bã«å¯ŸããŠããã®æŒç®åãaããbãŸã§ã®é¢æ°ãæåã®åŒæ°ãšããŠåãåãããããã¿ã€ãaã®2çªç®ã®åŒæ°ã«é©çšããã¿ã€ãbã®çµæãè¿ãããšãæå³ããŸãã é¢æ°åèšèªã§ã¯ãé¢æ°ãåŒæ°ãšããŠä»ã®é¢æ°ã«æž¡ãããšã¯äžè¬çã§ãããšèããããŠãããããåé¡ã¯ãããŸããã 次ã®çµè«ãåºãããšãã§ããŸãã
f 2- >ã¯4ãè¿ããŸã
f $ 2- >ã4ãè¿ããŸã
ïŒ $ ïŒ f 2- >ããã§ã¯4ãè¿ãããŸã
åãããšãæžãããã®3ã€ã®ç°ãªãæ¹æ³ããããŸãã
ããã§ã¯ãé¢æ°ãå®è¡ããããã«åŒæ°ãé¢æ°ã«çœ®ãæããæ¹ãæè¡çã«ç°¡åãªã®ã§ã$æŒç®åã¯å®éã«ã¯å¿ èŠãããŸããã ããããèå³ãåŒãããã«ããéã¢ããªã±ãŒã·ã§ã³ãæŒç®åãæå®ããããã>>åŒã³åºããåãåŒæ°ãéã®é åºã§åãåãããšãã§ããŸãã
ïŒ > $> ïŒ :: a -> ïŒ a- > b ïŒ -> b
x > $> f = f x- = f $ xãšåã
ããããæŒç®åã¯å€xãåããããã«é¢æ°ãé©çšããŠçµæãè¿ãããšèªãããšãã§ããŸãã UNIXã·ã¹ãã ã«ç²ŸéããŠããå Žåã¯ãUnixãã€ãã©ã€ã³ïŒãã€ãã|ïŒãåæ§ã«æ©èœããããšã«æ°ä»ããŠãããããããŸããã ããªãã¯åœŒã«ããã€ãã®ããŒã¿ãäžãã圌ã¯åœŒã«ç¶ãããã°ã©ã ãé©çšããŸãã 䟿å©ãªå Žåã¯é¢æ°æŒç®åã䜿çšã§ããŸãããéåžžã¯ãŸã£ãã䜿çšãããé¢æ°ã®åŒæ°ãåçŽã«çœ®ãæããŸãã
é¢æ°ã®äœ¿çšã«ã€ããŠèª¬æããã®ã§ã次ã®éèŠãªãããã¯ã¯é¢æ°ã®æ§æã§ãã ãããŠãããã¯æ¬åœã«éèŠãªãããã¯ã§ãã 2ã€ã®é¢æ°fãšgãããã³æ¬¡ã®åœ¢åŒã®xå€ããããšããŸãã
x :: a
f :: a- > b
g :: b- > c
ããã§ãaãbãcã¯ããã€ãã®ã¿ã€ãã§ãã ãããã®xãfãããã³gã䜿çšããŠä»¥äžãå®è¡ã§ããŸããxãååŸããããã«é¢æ°fãé©çšãïŒã¿ã€ãbã®å€ãååŸïŒãé¢æ°gãçµæã«é©çšããŸãã ã¿ã€ãxã®å€ã¯ã¿ã€ãbã®å€ã«å€æããããã®åŸãçºçããããšã¯ã¿ã€ãcã®å€ã«å€æãããŸãã Haskellã§æžãããšã¯èšãããç°¡åã§ãïŒ
g ïŒ f x ïŒ
ããããããã¯ãåfãšgã«äºææ§ãããå Žåãã€ãŸããé¢æ°fã®çµæãé¢æ°gã®åŒæ°ãšåãåã§ããå Žåã«ã®ã¿æ©èœããŸãïŒãã®å Žåãåbã§ãïŒã ããé¢æ°ã®å¥ã®é¢æ°ãžã®é©çšã¯å¥ã®æ¹æ³ã§è§£éã§ããŸãããããããã¿ã€ãã®2ã€ã®é¢æ°fããã³gãa-> bããã³b-> cãåããã¿ã€ãa-> cã®3çªç®ã®é¢æ°ãäœæããŸãã åŒæ°xã«é©çšãããšãã¿ã€ãcã®çµæãåŸãããŸãã 2ã€ã®é¢æ°ã3çªç®ã®é¢æ°ã«çµåãããã®èãæ¹ã¯ãé¢æ°ã®åæãšåŒã°ããŸãã Haskellã¯åçŽãªé¢æ°åææŒç®åãå®çŸ©ããŠããŸãïŒ
ïŒ ã ïŒ ::ïŒ b- > c ïŒ -> ïŒ a- > b ïŒ -> ïŒ a- > c ïŒ
g ã f = \ x- > g ïŒ f x ïŒ
ããã§ã¯ãè¡šèšã\ x-> ...ãã䜿çšããŸããããã¯ã1ã€ã®åŒæ°xãæã€ã©ã ãåŒïŒãŸãã¯ãåãããšãå¿åé¢æ°ïŒã瀺ããŸãã ããã¯ãåææŒç®åãåŒæ°ãšããŠ2ã€ã®é¢æ°ãåãã3çªç®ã®é¢æ°ãè¿ãæ¹æ³ã§ãã ç¹°ãè¿ãã«ãªããŸãããFYã§ã¯ãåŒæ°ãšããŠã®é¢æ°ãšæ»ãå€ãšããŠã®é¢æ°ã¯ããã¹ãŠã®ã¹ãããã§çºçããéåžžã«äžè¬çãªçŸè±¡ã§ãã
é¢æ°ãééã£ãé åºã§ç¶ããšãåææŒç®åã§è¿·æãçºçããããšããããŸãã ãããããéæ§ææŒç®åããæžãããšãã§ããŸãã>ïŒ
ïŒ >ã> ïŒ ::ïŒa- > b ïŒ -> ïŒ b- > c ïŒ -> ïŒ a- > c ïŒ
f >ã> g = \ x- > g ïŒ f x ïŒ
function> $>ã®éæŒç®åã§ãè¡šçŸã§ããŸãã
ïŒ >ã> ïŒ ::ïŒa- > b ïŒ -> ïŒ b- > c ïŒ -> ïŒ a- > c ïŒ
f >ã> g = \ x- > x > $> f > $> g
ãŸãã¯ããã«ã·ã³ãã«-åææŒç®åã䜿çšïŒ
ïŒ >ã> ïŒ ::ïŒa- > b ïŒ -> ïŒ b- > c ïŒ -> ïŒ a- > c ïŒ
f >ã> g = g f
the>ã>æŒç®åã®ã·ã°ããã£ã¯å°ãæ確ã§ãé¢æ°ãæ§æããããšãã«äœãèµ·ãããã瀺ããŠããŸãã é¢æ°fãšgãåããæ°ããé¢æ°ãèšç®ããŸãã 圌女ãhãšåŒã³ãŸãããã å€ã«hãé©çšãããšãæåã«å€ã«fãé©çšãã次ã«çµæã«gãé©çšãããšåãçµæã«ãªããŸãã ãããé¢æ°åæãšã¯äœã-ããã€ãã®é¢æ°ããä»ã®é¢æ°ââãäœæããæ¹æ³ã§ãã
äŸãåæããŸãããïŒ
f :: Int- > Int
f x = 2 * x
g :: Int- > Int
g y = 3 + y
h :: Int- > Int
h = g f- ãŸãã¯åãïŒf>ã> g
ããã§é¢æ°hã¯äœãããŠããŸããïŒ æŽæ°ãååŸãã2ã§ä¹ç®ãã3ãå ç®ããŸããã€ãŸãã次ã®ãªãã·ã§ã³ãšåçã§ãã
h :: Int- > Int
h x = 3 + 2 * x
é¢æ°ã®æ§æã¯ããã»ã©å€§ããããšã§ã¯ãªãããã«æãããããããŸãã-å®éã«ã¯ãããã¯é¢æ°åããã°ã©ãã³ã°ã®äž»èŠãªãã€ã³ãã®1ã€ã§ãã åæã«ãããæ¢åã®é¢æ°ãããè€éãªé¢æ°ã«ãªã³ã¯ããåŒæ°ã䜿çšããæäœæ¥ãçç¥ã§ããŸãã ãããŠããhã¯ãé¢æ°y = fïŒxïŒãèšç®ããããšã«ãã£ãŠæåã«ååŸããã次ã«é¢æ°h = gïŒyïŒãèšç®ããããšã«ãã£ãŠååŸãããé¢æ°ããšèšã代ããã«ããhã¯æåã«é©çšãããé¢æ°ã§ãfãgãã äžéãšã³ãã£ãã£ããªããã°ãã³ãŒãã¯ããç°¡æœã§é«ã¬ãã«ã«ãªããŸãã 10åã®é¢æ°ã次ã ã«åŒã³åºããªããã°ãªããªããšæ³åããŠãã ããã äžéçµæãäœæãããšã次ã®ãããªçµæã«ãªããŸãã
f11 x =
ããã
x2 = f1 x
x3 = f2 x2
x4 = f3 x3
x5 = f4 x4
x6 = f5 x5
x7 = f6 x6
x8 = f7 x7
x9 = f8 x8
x10 = f9 x9
x11 = f10 x10
ã§
x11
ãšãŠãç²ããŸãããïŒ æ¬¡ã«ãé¢æ°ã®æ§æãèŠãŠãã ããã
f11 = f10 f9 f8 f7 f6 f5 f4 f3 f2 f1
ãŸãã¯ãåãããšïŒ
f11 = f1 >ã> f2 >ã> f3 >ã> f4 >ã> f5 >ã> f6 >ã> f7 >ã> f8 >ã> f9 >ã> f10
çãã ãã§ãªããããçŽæçã§ãã ïŒãf1ãf2ãf3ãªã©ã䜿çšãããšãf11ãåŸãããŸããïŒã ãšããã§ãåæã䜿çšããŠåŒæ°ãªãã§é¢æ°ãèšè¿°ãããã®æ¹æ³ã¯ããç¡æå³ãªã¹ã¿ã€ã«ããšåŒã°ããŸãã ç®èãªããšã«ããããããæŒç®åïŒãïŒã¯ãç¡æå³ãªã¹ã¿ã€ã«ãã§éåžžã«ãã䜿çšãããŸã-éåžžã®ã³ãŒãããã匷åã§ãã é¢æ°ã®åŒæ°ãçç¥ããŠããããããç¡æå³ãã§ã¯ãªããåŒæ°ã®ãªãã¹ã¿ã€ã«ããšèšãæ¹ãæ£ããã§ãããã
åå°ã®ããŒããçŽ æã®åŒ·åïŒ
- é¢æ°ãé¢æ°ã®ã¢ããªã±ãŒã·ã§ã³ïŒã¢ããªã±ãŒã·ã§ã³ïŒãé¢æ°åããã°ã©ãã³ã°ã®åºæ¬æŠå¿µãšããŠã®é¢æ°ã®åæã
- ä»»æã®é åºã§åŒæ°ãåãé¢æ°ãäœæããããã®ãé¢æ°ãé©çšããããã®æŒç®åã
ã¢ããé¢æ°ãã¢ããå€
ãããŸã§ã®ãšãããç§ãèªã£ãããšã¯ãã¹ãŠãéåžžã«ç°¡åã§ããã 次ã«ãããè€éãªãã®ã«é²ã¿ãŸãã
åã«ãã¢ããã®æ¬è³ªã¯ãçŽç²ãªé¢æ°ã®èšç®ãšã¯ç°ãªãèšç®ã®åœ¢ã§ãé¢æ°ã®æ§æãšé©çšã®æŠå¿µãäžè¬åããããšã§ãããšè¿°ã¹ããäžçŽç©ãã®ããã€ãã®äŸãæ€èšããŸããã ã¢ããã®å®çŸ©ãããåçŽã«å ¥åå€ãèšç®ããããšã«å ããŠãäœãä»ã®ããšãè¡ããé«åºŠãªé¢æ°ããåŸãããããšãããããŸãã ã¹ã±ããã£ãã¯æ¬äŒŒHaskellèšèªã§ã¯ã次ã®ããã«ãããã®ãé«åºŠãªé¢æ°ããæžãããšãã§ããŸãã
f :: a- [ãã®ä»]-> b
ããã§ãfã¯æ¡åŒµé¢æ°ãaã¯åŒæ°ã®ã¿ã€ããbã¯çµæã®ã¿ã€ãããäœãä»ã®ãã®ãã¯ã³ã³ãã¥ãŒãã£ã³ã°ã®ããŸããŸãªæŠå¿µã«åºæã®ãã®ã§ãã Haskellã§ã¯ããèšç®ã®æŠå¿µããšããèšèã¯ãç¹ã«ã¢ããã«ãããŸãã ïŒç§ãã¡ã¯ãŸã ãããäœã§ããããç¥ããªãã®ã§ãä»ã®ãšãããç§ã®èšèã䜿ã£ãŠãã ãããïŒãé«åºŠãªé¢æ°ãã¯ãåé é¢æ°ããšããŠç解ã§ããŸãã ããã¯æšæºçãªçšèªã§ã¯ãªããéåžžã®çŽç²ãªé¢æ°ãšåºå¥ããããã«åŒã³åºããŸãã
ãã¡ããã "-[something other]->"ãšããè¡šèšã¯Haskellã§ã¯ç¡å¹ã§ãã å°ãåŸã§ããããå®éã«ã©ã®ããã«èŠãããã確èªãããããæ確ã«ãªãããšãé¡ã£ãŠããŸãã äžèšã®èšç®ã®æŠå¿µãæ¯èŒããããã«ããããã®è¡šèšæ³ã«åºå·ããŸãã Haskellã®ã¢ããã«å¯Ÿå¿ããèšç®åã®åæŠå¿µã瀺ããŸãã
- ã³ã³ãœãŒã«ãŸãã¯ãã¡ã€ã«ãžã®å
¥åºåæäœãå®è¡ããé¢æ°ã I / Oæäœã¯IOã¢ããã«å¯Ÿå¿ããããã次ã®ããã«èšè¿°ããŸãã
f :: a- [IO]-> b
ïŒãšããã§ãåŸã§èª¬æããããã«ãIOã¢ããã«ã¯ä»ã®çšéããããŸããïŒ - äŸå€ãã¹ããŒã§ããé¢æ°ã ããã€ãã®ã¿ã€ãã®ã¢ããããããã«å¯Ÿå¿ããŸãïŒ
f :: a- [ãšã©ãŒ]-> b
- ã°ããŒãã«ãŸãã¯ããŒã«ã«ç¶æ
ãšçžäºäœçšããé¢æ°ã ããã¯ãStateã¢ããã§ãïŒ
f :: a- [ç¶æ s]-> b
- 倱æããå¯èœæ§ã®ããæ©èœã å€åã¢ããã«ã€ããŠè©±ããŠããïŒ
f :: a- [å€å]-> b
- åæã«è€æ°ã®å€ãè¿ãé¢æ°ã ã¢ãããªã¹ãïŒãªã¹ãïŒïŒ
f :: a- [ãªã¹ã]-> b
Haskellã®ãªã¹ãã¯æ§æç³ã®ããã«å°ãç°ãªã£ãŠèŠãããããããªã¹ãããšããåèªãå°ããªæåã§æžããŸããããããã£ãŠãå¥åã®åèªã¯å¿ èŠãããŸããã
åŸã§ãããã®ãã¹ãŠã®ã¢ããã®äŸã瀺ããŸãã次ã«ãå ¥åºåæäœãå®è¡ããé¢æ°ãã€ãŸãIOã¢ããã«é¢é£ããé¢æ°ãæ€èšããŸãã ç䌌ã¬ã³ãŒãããããŸãïŒ
f :: a- [IO]-> b
fã¯ãã¢ããIOã§æ©èœããaããbãŸã§ã®é¢æ°ã§ãããšèšããŸãã äžã§è¿°ã¹ãããã«ãããã¯ç¡å¹ãªæ§æã§ãã Haskellã§ã¯ãå ¥åãŸãã¯åºåãã©ã¡ãŒã¿ãŒã§ãããå²ãããšã«ãããã¢ããé¢æ°ã®åé²æ§ãåã§ã©ããããå¿ èŠããããŸãã ååãšããŠã次ã®ãããªã¢ããé¢æ°ãäœæããããã®2ã€ã®ãªãã·ã§ã³ããããŸãã
f :: IO a- > b
ãŸãã¯
f :: a- > IO b
Haskellã¯ã¢ããé¢æ°ã«2çªç®ã®åœ¢åŒã®è¡šèšæ³ã䜿çšããŠããããšãããããŸãã
f :: a- > m b
ä»»æã®ã¢ããm; IOã®å Žåãªã©ã ïŒçéå ¥ãã®åŽåè ã«ãšã£ãŠãåé¢æ°ãf :: ca-> bãšãã圢åŒã®comonadã®æŠå¿µãããããšã«æ³šæããŠãã ãããäžéšã®comonad cã«ã€ããŠã¯ããã®è³ªåãä»åŸã®èšäºã®ããã«æ®ããŸããããïŒ
ããŠããšã³ããªãf :: a-> mbãã®èåŸã«ãããã®ã¯æ¬åœã«äœã§ããïŒ ã¬ã³ãŒããšã¯ãã¿ã€ãaã®å€ãåããã¿ã€ãmbã®å€ãè¿ãéåžžã®ïŒçŽç²ãªïŒé¢æ°fãããããšãæå³ããŸãïŒããããäœã§ããïŒã ãã®ãããHaskellã§ã¯ãã¢ããé¢æ°ã¯ãã¢ããã®æ»ãå€åãæã€çŽç²ãªé¢æ°ã§ãã ã€ãŸããçŽç²ãªé¢æ°ã¯éåžžã®å€ãåããã¢ãããè¿ããŸãã ããã¯ã©ãããæå³ã§ããïŒ
ãšã³ããªãmbãã«ã¯èª¬æãå¿ èŠã§ãã b-ããã¯äœããã®ã¿ã€ãã§ãã mã¯äœããã®ã¢ãããè¡šããŸãã ããããHaskellã®mã®æ£ç¢ºãªæå³ã¯äœã§ããïŒ Haskellã§ã¯ããmãã¯åã³ã³ã¹ãã©ã¯ã¿ãŒã§ããå¿ èŠããããŸããããã¯åã«é¢ããç¹å¥ãªé¢æ°ã§ããåŒæ°ãåããåãè¿ããŸãã ããã¯èŠãç®ã»ã©å¥åŠã§ã¯ãããŸããã Haskellã®ã¿ã€ãã[Int]ã®ããã«èŠãããæŽæ°ã®ãªã¹ããã®æŠå¿µãèããŠã¿ãŸãããã ãäœãã®ãªã¹ããéšåã¯ãç¹å®ã®ã¿ã€ãïŒIntïŒãåãåããå¥ã®ã¿ã€ãïŒæŽæ°ã®ãªã¹ãã[Int]ïŒãè¿ãã¿ã€ãã³ã³ã¹ãã©ã¯ã¿ãŒãšããŠç解ã§ããŸãã Haskellã®è§æ¬åŒ§ã¯ãªã¹ãã瀺ãããã«åºå®ãããŠããŸãããç¬èªã®åã³ã³ã¹ãã©ã¯ã¿ãå®çŸ©ã§ããŸãã ãŸããããããå€çžåã«ã¯ç¬èªã®ã³ã³ã¹ãã©ã¯ã¿ããããŸãã æãåçŽãªå€çžåã®1ã€ã¯ãå€åã
ããŒã¿ å€å a = Nothing | ãã
ããã§ã¯ãå€åã¯åïŒaãšåŒã°ããïŒãåããåºåå€ãšããŠæ°ããåãçæããåã³ã³ã¹ãã©ã¯ã¿ãŒã§ãããšè¿°ã¹ãŠããŸãã ã¿ã€ãIntãaã«çœ®ãæãããšãæ°ããã¿ã€ãMaybe IntãåŸãããŸããããã¯æ¬¡ã®ããã«èšè¿°ãããŸãã
ããŒã¿ å€å Int = Nothing | ã¡ããã©int
ãããã£ãŠãå€åã1ã€ã®åãå¥ã®åã«ãããããåé¢æ°ã§ãã
ã¢ããã¯ãHaskellã«ããããã«ãå€ãåãã©ããããŠæ°ããåãçæããåã³ã³ã¹ãã©ã¯ã¿ã§ãããããŠå®éãIOã¢ããã¯ãIO BoolãIO IntãIO FloatãIO CharãIO Stringãªã©ã®åãçæãããåã³ã³ã¹ãã©ã¯ã¿ã§ãããããã¯ãã¹ãŠHaskellã§æå¹ãªã¿ã€ãã§ããåæ§ã«ãMaybeã¢ããã®å Žåãæå¹ãªã¿ã€ãMaybe BoolãMaybe Intãªã©ãæ§ç¯ãããŸããã¢ããã³ã³ã¹ãã©ã¯ã¿ãŒã«ãã£ãŠäœæãããåããã¢ããåããšåŒã³ãŸããIO BoolãMaybe Intãªã©-ãããã¯ãã¹ãŠã¢ããåã§ãã
泚æäºé ïŒHaskellã®ãã¹ãŠã®ã¢ããã¯åã³ã³ã¹ãã©ã¯ã¿ãŒã§ãªããã°ãªããŸãããããã¹ãŠã®åã³ã³ã¹ãã©ã¯ã¿ãŒãã¢ããã§ã¯ãããŸãããåŸã§èŠãããã«ãã¢ããã¯åã³ã³ã¹ãã©ã¯ã¿ã§ãªããã°ãªããŸãããã¢ããã«å¯ŸããŠç¹å¥ãªæäœãå®çŸ©ããå¿ èŠãããããããã¯ããã€ãã®ãã¢ããã®æ³åããæºãããªããã°ãªããŸããã
ç§ãã¡ã¯éåžžã«éèŠãªè³ªåã«æ¥ãŸãïŒã¢ããåãè¡šãå€ã¯äœãããŸããïŒç§ã¯ãããããåé ã®æå³ããšåŒã³ãŸããããšãã°ãMaybe Intå€ãšã¯äœã§ããïŒIO Float-ããã¯äœã§ããïŒ
ã¢ããããç解ããã®ãé£ãããããã«èŠãããã®ã«åºäŒã£ããšããã§ãã
èŠçŽããŸãããã
- ãçŽç²ãªé¢æ°ããšããããªãã¿ã®æŠå¿µããããŸããã€ãŸããäœãããã«ãããã¿ã€ãã®å ¥åå€ãå¥ã®ã¿ã€ãã®åºåå€ïŒãŸãã¯åããã®ïŒã«å€æããé¢æ°ã§ãã
- , - . «- » / , , , , . , « ». , , .
- Haskell â , - . «».
ããã§ããã¢ããã®æå³ãã®æ¬è³ªã«ã€ããŠç§ãã¡ã¯äœãèšãããšãã§ããããšãã質åãåå®åŒåããŸããïŒ
çãã¯ïŒåœŒãã¯æ¬åœã«çŽæçã§ã¯ãããŸããïŒ ãçŽæçã«ã¯ãã¢ããé¢æ°ïŒäžéšã®ããŒã¿ãä»ã®ããŒã¿ã«å€æãã以å€ã®ããšãè¡ããã®ïŒã®æŠå¿µã ãåé ã®æå³ãã®æŠå¿µã¯ãŸã£ããçŽæçã§ã¯ãããŸããã Haskellã§ã¯ãã¢ããé¢æ°ã®åºåå€ã瀺ãã®ãæ £ç¿ã§ããã ãã§ãããããã®ã¢ããã®æå³ãå®éã«äœã§ããããéããŠã¢ãããç解ããããšãããšãç¡é§ã«æéãè²»ãããŸããæ°ã«ããªãã§ãã ããïŒããã ãã®äŸ¡å€ã¯ãããŸããïŒ
ããããHaskellã®æç®ã«ã¯ãã¢ããã®æå³ã説æãã2ã€ã®äžè¬çãªæ¹æ³ããããŸãïŒå€ãã®ããã¥ã¢ã«ã眪ãç¯ãæããªæ¹æ³ããããããããŸãïŒã
1. maåã®ã¢ããå€ïŒäžéšã®ã¢ããmã®å ŽåïŒã¯ãäœããå®è¡ããŠaåã®å€ãè¿ãç¹å¥ãªçš®é¡ã®ãã¢ã¯ã·ã§ã³ãã§ããã¢ã¯ã·ã§ã³ã®æ¬è³ªã¯ç¹å®ã®ã¢ããã«äŸåããŸãã
2.ã¿ã€ãmaã®ã¢ããå€ïŒäžéšã®ã¢ããmïŒã¯ãã¿ã€ãaã®å€ãæ ŒçŽãããã³ã³ããã§ãã
ã¢ããã®æå³ã®ãªãã¬ã¯ã·ã§ã³ãéããŠã¢ãããç 究ããããšã¯ééã£ãã¢ãããŒãã§ãããã¢ããé¢æ°ã®ãªãã¬ã¯ã·ã§ã³ãéããŠæ£ããã§ããå®çŸ©ã«ã¯ããçšåºŠã®æå³ãããããšãçŽåŸãããããšæããŸãïŒ1ïŒãããããåŸã§èŠãããã«ãå®çŸ©ïŒ2ïŒã¯ã¢ãããç 究ããééã£ãæ¹æ³ã§ããã»ãšãã©ã®ã¢ããã¯ã³ã³ããã§ã¯ãããŸããããã³ã³ããã®ããã«åäœãããã®ããããŸãã
ç§ãã¡ã®æ©èœãèŠãŠã¿ãŸãããããããåºçºç¹ãšããŠãããªãæ確ã§ããããšãé¡ã£ãŠããŸãïŒ
F :: - >ã¡ã¬ãã€ã
次ã«ãé¢æ°fxïŒxã¯aåïŒã¯mbåã«ãªããŸãã
x :: a
fx :: mb
fxã¯çŸåšããåé ã®æå³ãã§ãããå®å šã«çŽæçã§ã¯ãããŸãããå¥ã®æ©èœãæ€èšããŠãã ããïŒ
g :: a -> ïŒ ïŒ -> a
gx ïŒ ïŒ = x
gã¯æåéã次ã®ããšãè¡ããŸããä»»æã®åaã®å€ãåããé¢æ°ã«ã©ããããããã空ã®å€ãgã«æž¡ãããšã§çµæãååŸã§ããŸããïŒ{6}ïŒç©ºã®åãšå€ã¯ãæ¬åŒ§ïŒïŒã§åãããã«Haskellã§èšè¿°ãããŸããããã¯ãç§ãã¡ã«ãšã£ãŠéèŠã§ã¯ãªãå/å€ã§ããïŒã空ããšããèšèã¯ããã®å€ãç§ãã¡ã«ãšã£ãŠé¢å¿ãè¡šããŠããªãããšãæå³ããŸããïŒæ¬¡ã«äŸã瀺ããŸãã
h = g 10
h ïŒ ïŒ -æ°å€10ãèšç®ãããŸã
ããŠãgïŒfxïŒé¢æ°ãçºæããããšã§äœãåŸãããŸããïŒã¿ã€ããèŠãŠã¿ãŸãããã
fx :: mb- äžèšãåç §
g :: a -> ïŒ ïŒ -> a
g ïŒ fx ïŒ :: ïŒ ïŒ -> mb
ãããã£ãŠãé¢æ°gïŒfxïŒã¯ã¿ã€ãïŒïŒ-> m bã§ããã€ãŸãã空ã®å€ãåããåé ã®å€ãè¿ããŸããäžæ¹ããããèŠããšãããã¯ç©ºã®å€ïŒäœããã£ãŠãïŒãåbã®å€ã«å€æãããšåæã«ããäœãä»ã®ããšããå®è¡ããåé é¢æ°ã§ããïŒãä»ã®äœããã¯ãã©ã®ã¢ããã䜿çšããããã«äŸåããŸããïŒããã¯ããçšåºŠçã«ããªã£ãŠããŸãã
ãããç§ã®èãã§ãã ïŒmbåã®ïŒã¢ããå€ãäœã§ããããç解ããå¿ èŠããããšæãå ŽåãïŒïŒ-> mbåã®ã¢ããé¢æ°ãã€ãŸãã空ã®å€ãbåã®å€ã«ãããã³ã°ããã ãã§ãªããäœããå®è¡ããé¢æ°ãšããŠèããã®ãæåã§ãä»ã®äœããã¿ã€ãmbã®å€ãã¿ã€ãïŒïŒ-> mbã®é¢æ°ã§ãããã®ããã«ãç°ãªãæ¹æ³ã§ã®ã¿èšè¿°ãããŸããã€ãŸããã¢ããã®æå³ã¯ãç§å¯ã®æ©èœãã§ãããããã£ãŠããããã¯ãã¢ã¯ã·ã§ã³ããšåŒã°ããããšãå€ããæ©èœã«é¢é£ä»ããããŠããŸãããå®å šãªæ©èœã§ã¯ãããŸããã ïŒãã¢ã¯ã·ã§ã³ãå®è¡ããããšèšãããšããããŸãããããã¯é¢æ°ã䜿çšããã®ã«äŒŒãŠããŸããïŒ
ããã€ãã®äŸã¯ä»ã®ãšããåé¡ãããŸããã Haskellã§2ã€ã®I / Oé¢æ°ã䜿çšããŸãã
getlineã® :: IO æåå
putStrLn :: æåå - > IO ïŒ ïŒ
getLineã¯ãã³ã³ãœãŒã«ããããã¹ãã®è¡ãèªã¿åããäœããã®æ¹æ³ã§ãããè¿ããé¢æ°ãïŒå®éã«ã¯ãåé ã¢ã¯ã·ã§ã³ããšããŠãç¥ãããåé å€ïŒã§ããputStrLnã¯ãæååãåŒæ°ãšããŠåããã³ã³ãœãŒã«ã«åºåããè¡çµäºèšå·ãè¿œå ããé¢æ°ïŒä»åã¯å®éã«é¢æ°ïŒã§ãã
ãããã®é¢æ°ã®ã¿ã€ããåŸæ¥ã®èšèªã§ã©ã®ããã«èŠãããã«ã€ããŠå°ãèããŠã¿ãŠãã ããã次ã®ãããªãã®ãæ³å®ã§ããŸãã
getLine :: ïŒ ïŒ -> String -Haskellã«ã¯ãªã
putStrLn :: String -> ïŒ ïŒ -Haskellã«ã¯ãªã
getLineé¢æ°ã¯ç°¡åã«ç解ã§ããŸãã空ã®å€ïŒäœããã£ãŠãïŒãåãåããäœããã®æ¹æ³ã§ã³ã³ãœãŒã«ãšå¯Ÿè©±ããããããæååããã§ããããŠããã®æååãè¿ããŸããputStrLnã¯åŒæ°ãšããŠæååãåããäœããã®æ¹æ³ã§ã³ã³ãœãŒã«ãšå¯Ÿè©±ãïŒæååãåºåïŒã空ã®å€ãè¿ããŸãïŒäœããã£ãŠãïŒã空ã®å€ã®æå³ã¯ãé¢æ°ãå®éã«é¢æ°ã§ããããšãã€ãŸãå ¥åå€ãšåºåå€ãæã£ãŠããããšãä¿èšŒããããã«æžããããŠããããšã«æ³šæããŠãã ãããïŒïŒãåãé€ããšã次ã®ããã«ãªããŸãã
getLine :: String
putStrLn :: String
ããã¯äºå®ã§ã¯ãããŸãããgetLineã¯åãªãæååã§ã¯ãããŸãããæååãè¿ãã«ã¯åŒæ°ãä»ããŠåŒã³åºãå¿ èŠããããŸããåæ§ã«ãputStrLnã¯åãªãæååã§ã¯ãããŸããã圌女ã¯æåååŒæ°ãå¿ èŠãšããŸãããããã¯äœã«é¢ä¿ãªãæ»ããŸã ãããã®å Žåããå ¥åå€ãŸãã¯åºåå€ãé©åãªå Žæã«çœ®ãæããããã ãã«ç©ºã®å€ãå¿ èŠã§ãã
ããããHaskellã«æ»ããŸããç§ãã¡ãæã£ãŠããŸãïŒ
getlineã® :: IO æåå
putStrLn :: æåå - > IO ïŒ ïŒ
putStrLné¢æ°ã®ã¿ã€ãã¯ç°¡åã«ç解ã§ããŸããããã¯ãã¢ããIOå ã®åãªãã¢ããé¢æ°ã§ããæååãå°å·ã«åãã空ã®å€ïŒäœããã£ãŠãïŒãè¿ãããä»ã®äœãããè¡ãããšãç解ãããŠããŸãã ïŒãã®å Žåãã³ã³ãœãŒã«ãšå¯Ÿè©±ããŠè¡ãåºåããããšããIOã¢ããã§ã§ããããšã§ããïŒ
getLineé¢æ°ã®ã¿ã€ãã¯ç解ããã®ãããå°é£ã§ãã getLineã¯åé å€ã§ããããããïŒïŒ-> IO Stringåã®åé é¢æ°ãšèããæ¹ãç°¡åã§ããããã¯çã«ããªã£ãŠããŸãïŒããã¯ãã©ã®å€ã«é¢ä¿ãªããã³ã³ãœãŒã«ãšã®å¯Ÿè©±äžã«æååãè¿ãé¢æ°ã§ãïŒã€ãŸããã³ã³ãœãŒã«ã«å ¥åããã®ãåŸ ã¡ãŸãïŒã
ãã ããHaskellã«ã¯ããã®é¢æ°ã«ã¯ïŒïŒ-> IO Stringãªã©ã®ã¿ã€ãã¯ãããŸããããIO Stringã¿ã€ãããããŸããã¢ããå€ã¯ãã¿ã€ãïŒïŒã®æé»çãªå ¥ååŒæ°ãæã€ã¢ããé¢æ°ã§ããããšãããããŸããå€ãã®Haskellã®å°é家ã¯ãããããã¢ã¯ã·ã§ã³ããšããŠèªèããŠããŸããgetLineãI / Oæäœãå®è¡ãããã¢ã¯ã·ã§ã³ãã§ãããšèšããšãããããã¯åé é¢æ°ãæå³ããŸããå°æ¥ã®èšäºã§ç¶æ ã¢ããã«ã€ããŠè°è«ãããšããå€ã®ããã«èŠãããã®ãé¢æ°ãšããŠã©ã®ããã«æ©èœãããã«ã€ããŠãããªãã¯ãã£ãšæ°ä»ãã§ãããã
次ã®èšäºã§ã¯ã2ã€ã®åºæ¬çãªã¢ããæŒç®ã«ã€ããŠèª¬æããŸãããããã¯ã©ãããæ¥ãã®ãããããŠãã®èåŸã«ãããã®ã§ãã
å 容
ããŒã1ïŒåºæ¬
ããŒã2ïŒé¢æ°>> =ããã³return
ããŒã3ïŒã¢ããå
ããŒã4ïŒã¢ãããšãªã¹ãã¢ãã
泚é
{1}ãªãªãžãã«ã§ã¯ãããšã©ãŒãçºçããããã-ããã°ãçºçãããããããããã¯å€å°ç°ãªã£ãŠç¿»èš³ãããå¯èœæ§ããããŸãã ;ïŒ
{3}ããã¯ããã©ã¡ããªãã¯å€åããšåŒã°ããŸãã
{4}èè ã¯ãé¢æ°ã®çµæãšããŠåãã¿ã€ãã®ãªããžã§ã¯ãã®ã»ãããæå³ããŸããåé¡ã¯ã圌ã®æèŠã§ã¯ãé¢æ°ã¯ç°ãªãæ°ã®ãªããžã§ã¯ããè¿ãããšãã§ãããšããããšã§ãïŒ0ããnãŸã§ãã€ãŸãããªããžã§ã¯ãã®æ°ã¯äºåã«ããããŸãããCãšJavaã®äž¡æ¹ã§ããã®åé¡ã¯åçããŒã¿åã«ãã£ãŠå¹æçã«è§£æ±ºãããŸãã
{5}ãªãªãžãã«ã§ã¯-æ°žç¶çãªè¡šçŸïŒãç§ãã¡ã®ã±ãŒããæã£ãŠé£ã¹ãŠãã ãããã
{6}ãªãªãžãã«-ãåäžãã®å€ãåäœã
翻蚳è ãã
ç§ã¯ãããŸã§èè ã®ä»ã®è³æãžã®ãªã³ã¯ãèŠã€ããŠããŸãããæã£ãŠããŸã
1. Haskellãã¥ãŒããªã¢ã«Haskellã®ãã¥ãŒããªã¢ã«ãšèšäºã®æãå æ¬çãªã³ã¬ã¯ã·ã§ã³ã¯è±èªã§ãã
2. xgu.ruã®Haskell-å€ãã®äŸ¿å©ãªãªã³ã¯ã
3. ãã·ã¢ã®ã©ã ãææ -ãã·ã¢èªã®AFã«é¢ããåªããæ å ±æºã
4. Haskell Planet -Haskellããã³FPã«é¢ããããã«åªããè±èªã®æ å ±æºã