
ð ã¡ã¿ã³ã³ãã¥ãŒãã£ã³ã° ã¡ã¿ã·ã¹ãã é·ç§»ïŒã¹ãŒããŒã³ã³ãã€ã« REFAL (for REcursive Functions Algorithmic Language) ãŽã¡ã¬ã³ãã£ã³ã»ãã§ãŒãããŽã£ãã»ã¿ãŒãã³
ä»»æã®çš®é¡ã®ã·ã¹ãã Sãèããããã®ã·ã¹ãã Sã®ã³ããŒãããã€ãäœãæ¹æ³ããããšããããããã®ã·ã¹ãã ã¯ãSåã®ã·ã¹ãã ããµãã·ã¹ãã ãšããŠæã¡ãSåã®ãµãã·ã¹ãã ãäœããã®æ¹æ³ã§æ€æ»ãå¶åŸ¡ãä¿®æ£ãè€è£œããæ©æ§ãè¿œå ããæ°ããã·ã¹ãã S'ã«çµ±åããããšããããããŠãS'ãSã«é¢ããã¡ã¿ã·ã¹ãã ãšåŒã³ãS'ã®çæãã¡ã¿ã·ã¹ãã é·ç§»ãšåŒã¶ã
ç§ã¯ãæèãç§åŠã®çŸè±¡ïŒé²åãžã®ãµã€ãããã£ãã¯ãªã¢ãããŒãã39ã«ãããŠãèãã人éã®åºçŸãå«ãçç©åŠçã»æåçé²åã®äž»èŠãªã¹ãããã¯ã倧èŠæš¡ãªã¡ã¿ã·ã¹ãã é·ç§»ã«ã»ããªããªããšè§£éããŠããã
ã³ã³ãã¥ãŒã¿ã§MSTãå®çŸããããã®æåã®ã¹ãããã¯ãé©åãªã¢ã«ãŽãªãºã èšèªãèšèšããããšã§ãããç§ã¯ãã®ãããªèšèªã®æåã®ããŒãžã§ã³ãã¡ã¿ã»ã¢ã«ãŽãªãºã èšèª[36]ãšåä»ããããããã¯ã¢ã«ãŽãªãºã èšèªã®æå³è«ãå®çŸ©ããããã®ã¡ã¿èšèªãšããŠæ©èœããã¯ãã ã£ãããã§ããããã®åŸãç§ã¯ãããç°¡ç¥åããŠREFAL (for REcursive Functions Algorithmic Language)ãšåã¥ãããRefalã¯ã¡ã¿ã·ã¹ãã éå±€ã®æ®éèšèªãšããŠèãããããã®ã§ãäžæ¹ã§ã¯ããã®èšèªã§ããã°ã©ã ãå®è¡ããæ©æ¢°ïŒRefalãã·ã³ïŒãçè«åæã®å¯Ÿè±¡ãšãªãããã»ã©åçŽã§ãããä»æ¹ã§ã¯ããã¥ãŒãªã³ã°ãã·ã³ããã«ã³ãã®æ£èŠã¢ã«ãŽãªãºã ïŒã¡ãªã¿ã«åŸè ã¯Refalã®æºã®äžã€ã§ããïŒãªã©ã®çŽç²ã«çè«èšèªãšã¯ç°ãªããçŸå®ã®ã¢ã«ãŽãªãºã ãæžãããã®ããã°ã©ãã³ã°èšèªãšããŠååã«è±ãã§ãããšããç¹åŸŽããã£ãŠããã
Refalã®å¹ççãªã€ã³ã¿ããªã¿ãæåã«æžãããã®ã¯1968幎ã®ããšã§ã[26]ãåœæãRefalã¯ãã¿ãŒã³ããããå èµããçŽç²ãªé¢æ°åèšèªã§ãããä»ã®èšèªãšã¯å€§ããç°ãªã£ãŠããŸãããé¢æ°åèšèªãäžè¬çã«ãªã£ãçŸåšã§ã¯ãRefalã®ç¹åŸŽçãªéšåãèŠçŽããã ãã§èªè ã«èŠªãã¿ãæããŠãããããšæããŸããRefalã®æ倧ã®ç¹åŸŽã¯ããã®ããŒã¿ãã¡ã€ã³ã«ãããRefal ã§ã¯èšå·ã®æäœã«ãªã¹ã (æãäºåæš) ã§ã¯ãªããåŒãçšããŸããRefalã®åŒã¯ãä»»æã®(åºå®ã§ãªã)ããŒãã®ã¢ãªãã£ãæã€æšããŸãã¯ãã®ãããªæšã®ã·ãŒã±ã³ã¹ãšããŠèŠãããšãã§ããã
term ::= symbol | variable | (expression) | <function expression>
expression ::= empty | term expression
ãã®ããã«ãså€æ°s.iïŒiã¯ã€ã³ããã¯ã¹ïŒååïŒïŒã¯ä»»æã®èšå·ããtå€æ°t.iã¯ä»»æã®é ããeå€æ°e.iã¯ä»»æã®åŒãè¡šããŠããã®ã§ãããe-variableã®å ŽåïŒæ¥é èŸãèœãšããŠãããïŒxã¯e.xãšåãã§ãããé¢æ°åŒã³åºãã®åœ¢åŒã«ã¯è§æ¬åŒ§ãçšããã<f x> ãšãªããRefalã«ãããããã°ã©ã ã¯ãçžäºã«ååž°çãªæ(æžãæãèŠå)ã®åã§ããã æžãããé ã«è©Šè¡ãããã以äžã¯ãåŒæ°ãå·Šããå³ãžèµ°æ»ãããã¹ãŠã®'a'ã'b'ã«çœ®ãæããé¢æ°fã®äŸã§ããã
<f 'a'> = 'b'<f x>
<f s.1 x> = s.1 <f x>
<f > =
ã¢ã¹ã¯ã¯å·¥åŠç©çåŠç 究æã®å°ããªã°ã«ãŒã (Stanislav Florentsev, Alexander Krasovsky, Vladimir Khoroshevsky) ãšå ±ã«ç§ãã¡ã¯ãœããšãé£éŠã§æã人æ°ã®ãããã·ã³çšã® Refal ã³ã³ãã€ã©ãäœæãã Refal ã¯ãã®éšåã§ããªãæåã«ãªããŸãã (Refal ã®éçºããã³äœ¿çšã«é¢ããæ°å¹Žåã®æç®ã«ã¯çŽ 200 ç¹ãå«ãŸããŠããŸã)ãV.Kistlerovã«ãã£ãŠéçºããã代æ°çæäœã®ããã®èšèªFLAC[22,4]ãšãSergei RomanenkoãšRuten Gurinã«ããRefal Plus[17]ã§ãããRefalã®ããŒã¹ãšãªã£ãã¢ã€ãã¢ã®äžçš®ã®è«ççã¯ããŒãžã£ã§ããããã®åŸã®ç 究ã§ã¯ãDOSãšUNIXã§åäœããRefal-5 [44]ãšããååã®Refalã®æ¡åŒµçã䜿ããŸããã
èšèªãåºå®åããåŸã®æ¬¡ã®æŠå¿µçãªå±ã¯é転ã§ãã£ã[37,38]ãäžã®é¢æ°fã®åŒã³åºã<f 'a'x>ããããšãããæããã«'b'<f x>ãšçœ®ãæããããšãã§ãããããã¯Refalãã·ã³ãé¢æ°è©äŸ¡ã®1ã¹ãããã§è¡ãããšã ããã§ãããéšåçãªè©äŸ¡ãè¡ãããããã¯åçŽãªé転ã®å Žåã§ãããä»åºŠã¯ãéšåè©äŸ¡åšãäœãããªã<f x>ãšããåŒã³åºããèããŠã¿ãããããããé転ã¯ãŸã å¯èœã§ããããªããªããããã¯ãããªãç¶æ³ã§ãèšç®ã®1ã¹ãããã®ã·ãã¥ã¬ãŒã·ã§ã³ã§ããããã§ãããããã°ã©ã ã®ç䟡å€æãããæ¹çšåŒã®äœ¿çšãšèãããšãéšåè©äŸ¡ã¯æ¹çšåŒ<f 'a'x> ='b'<f x>ã®äœ¿çšã§ãããããã¯å®å šã«çã«ããªã£ãŠããããããã<f x>ãšããåŒã³æ¹ããã以äžãããã°ã©ã ãæ¹åãããããªæ¹çšåŒã¯èŠããããªããé転ã¯ããµã€ãããã£ãã¯ãªæèã®ç£ç©ã§ãããç§ãã¡ã¯ã¡ã¿ãã·ã³ãäœãããããRefalãã·ã³ã§æåã«ã§ããããšã¯ããã®åäœãã·ãã¥ã¬ãŒãããããšã§ãªããã°ãªããªããã€ãŸããã¡ã¿ãã·ã³ã¯Refalãã·ã³ãé§åããæ¬æ¥ã¯æºåãããŠããªããèªç±å€æ°ãæã€åŒã«å¯Ÿããèšç®ããããã®ã§ããããã®ãããªèšç®ã¯ã¡ã¿èšç®ãšåŒã¶ã®ããµããããããã®çµæã¯é¢æ°ã®å€ã§ã¯ãªãããã®å€ã«åããèšç®ã®1ã¹ããããèšè¿°ããRefalãã·ã³ã®ç¶æ ãé·ç§»ã®ã°ã©ãã§ããããã®å Žåãé転ã¯ã°ã©ããçæããã
e:pã¯ãåŒeããã¿ãŒã³pã«ããããããæäœãè¡šãããã¿ãŒã³ã¯ãæäœã®äžææ§ãä¿èšŒããç¹å¥ãªçš®é¡ã®åŒ(rigidãšåŒã°ãã)ã§ãããåŒEã¯ã(1)så€æ°ã ããEã«2å以äžå ¥ãããšãã§ãã(2)Eã®éšååŒ(Eèªèº«ãå«ã)ãåŒã§åºåããã2ã€ã®eå€æ°ãå«ãŸãªããšããåäœã§ãããšããããªãã[]ã¯èªã¿ãããããããã«ç©ºåŒãè¡šããŠããã
é転ããã¹ãŒããŒã³ã³ãã€ã«ïŒç¥ããŠSCPïŒã«è¡ãçããããã®ããã°ã©ã å€æã®æè¡ã«ã€ããŠãå€ãã®è©³çŽ°ãããªãšãŒã·ã§ã³ã¯ããŠãããç°¡åã«èª¬æããããã¹ãŒããŒã³ã³ãã€ã«ã¯ãã©ã€ãã®ã¢ããã°ã¬ãŒãã§ããããã©ã€ãã³ã°ããªãã¡ãŒã«ãã·ã³ã®1ã€ã®ã¹ãããã説æããŠããã®ã«å¯ŸããŠãã¹ãŒããŒã³ã³ãã€ã«ã¯ããã€ãã®ã¹ããããå«ãããšãã§ããããã©ã€ãã³ã°ã§æ°ããã¢ã¯ãã£ããªïŒããªãã¡é¢æ°åŒã³åºããè¡šãïŒããŒãCãçŸãããšãã¹ãŒããŒã³ã³ãã€ã©ã¯ãã®ç¥å ã調ã¹ãåç¥å C'ã«é¢ããŠæ¬¡ã®3ã€ã®æ±ºå®ã®ãã¡1ã€ãè¡ãã
ã¹ãŒããŒã³ã³ãã€ã«ã®åçãšïŒéåžžã®ããã°ã©ã å€æã®èãæ¹ã®éãã«æ³šæããŠã»ããïŒã¹ãŒããŒã³ã³ãã€ã«ã§ã¯ãå ã®ããã°ã©ã ãå€æŽããããšã¯ãªãããããäžçš®ã®ãèªç¶æ³åããšã¿ãªãããã®æ³åã«åŸã£ãèšç®éçšã®ã¢ãã«ãæ§ç¯ããããããŠããã®ã¢ãã«ãèªå·±å®çµããããã«ãªã£ãããå€æŽãããŠããªãå ã®ããã°ã©ã ãæšãŠãã°ããã®ã§ããç§ã¯ãã¹ãŒããŒã³ã³ãã€ã«ãšã¯ã人éã®ç¥èã®äžè¬åçãã³ã³ãã¥ãŒã¿ã§å®çŸãããã®ã ãšèããŠãããäžè¬åçãšã¯ãäžçã®ããéšåã«ã€ããŠèªå·±å 足çãªã¢ãã«ãæ§ç¯ã§ãããããªãäžè¬åãããç¶æ ãæ¢çŽ¢ããããšã ãšèããŠããã®ã ã
Neil Jones [21] ã¯éšåè©äŸ¡ãšæ¯èŒãããã©ã€ãã³ã°ã®åŸ¹åºçãªçè«çåæãè¡ã£ããæè¿ãDIKUããã¹ãŒããŒã³ã³ãã¥ãŒãã£ã³ã°ã«é¢ããããå€ãã®è«æãåºãŠãã[13,32,33,34,35]ããã®äžã§GlÃŒckã®åœ¹å²ã¯ãåèæç®ãèŠãã°ãããããã«ãæãéèŠãªãã®ã§ããã
ãŽã¡ã¬ã³ãã£ã³ã»ãã§ãŒãããŽã£ãã»ãã¥ã«ãã³ïŒãã·ã¢èªãÐалеМÑОÌÐœ ЀÑЎПÑÐŸÐ²ÐžÑ Ð¢ÑÑÑОÌÐœã1931幎2æ14æ¥ããã«ã¹ã¯ - 2010幎4æ7æ¥ãã¥ãŒãžã£ãŒãžãŒå·ãªãŒã¯ã©ã³ã[1]ïŒã¯ããœé£ãšã¢ã¡ãªã«ã®ç©çåŠè ããµã€ãããã£ãã¯ã¹ãã³ã³ãã¥ãŒã¿ãŒç§åŠè ã§ãããããã°ã©ãã³ã°èšèªRefalãã¡ã¿ã·ã¹ãã é·ç§»ã®çè«ãã¹ãŒããŒã³ã³ãã€ã«ã®æŠå¿µãéçºããã人工ç¥èœã®ãã€ãªãã¢ã§ãããå°çè³ä»®èª¬ã®æå±è ã§ãããã
ã¿ãŒãã³ã®ç§åŠçç 究ã®å²åŠçæ žå¿ã¯ãã·ã¹ãã ã®æ§é ãšæ©èœã«ãããŠããé«ãã¬ãã«ã®å¶åŸ¡ãåºçŸããé²åçããã»ã¹ã瀺ãã¡ã¿ã·ã¹ãã é·ç§»ã®æŠå¿µã§ããã
Turchinã¯ãã®æŠå¿µãçšããŠãã°ããŒãã«ãªé²åè«ãšäžè²«ãã瀟äŒã·ã¹ãã çè«ãæäŸããå®å šãªãµã€ãããã£ãã¯ã¹ã®å²åŠã»å«çäœç³»ãéçºããæ°åŠã®æ§æ䞻矩çåºç€ãæ§ç¯ããŠããã
ãŸããREFALèšèªãçšããŠãã¡ã¿ã·ã¹ãã é·ç§»ã«åºã¥ãããã°ã©ã ã®å€æãšæé©åã®ããã®çµ±äžçææ³ã§ããã¹ãŒããŒã³ã³ãã€ã©ãå®è£ ããŠãã
åœæäºæã¯Lispã®ããã¥ã¢ã«ãèªãã§ã³ã³ãã€ã©ãå®è£ ããä»äºã«åãçµãã§ãããããã¥ã¢ã« (LISP 1.5 Programmer's Manual[1]) ã§ã¯ããã®ã€ã³ã¿ããªã¿ããããªããã®ã§ãããã説æããããšã§Lispã説æãããŠãããã€ã³ã¿ããªã¿ãããã°ããããã³ã³ãã€ã©ãçæããããšãã§ããã®ã§ã¯ãªããããšããã®ãæåã®çºæ³ã ã£ããéšåèšç®ãèªå·±é©çšãšããæŠå¿µã¯ãéè¯ããå°ãåºãããšãã§ãããã®ã ããšããã
æåã®çºè¡šã¯ãèšç®éçšã®éšåè©äŸ¡: ã³ã³ãã€ã©ã»ã³ã³ãã€ã©ã®äžæ¹æ³ãïŒ1971幎ïŒãšããé¡ã§ãŸãšãããããã¢ã³ãã¬ã€ã»ãšã«ã·ã§ãïŒè±èªçïŒïŒé²: ÐМЎÑеÌй ÐеÑÑПÌÐ²ÐžÑ ÐÑÑПÌвïŒãbitèªã«å¯ããïŒ1980幎æ²èŒïŒããã¿ã ã©ã®å°åœ±ã«ã€ããŠãã§ã¯ãéšåè©äŸ¡ïŒåæç®äžã§ã¯ãæ··åèšç®ããšåŒãã§ããïŒããã°ã©ã ãšã€ã³ã¿ããªã¿ãã³ã³ãã€ã©ãã³ã³ãã€ã©ãžã§ãã¬ãŒã¿ã®é¢ä¿ã瀺ãã3ã€ã®åŒã«ã€ããŠãæç§æžãæžããããšãã«ã¯ïŒãã°ãããé¢ä¿åŒ (I)ïŒ (II) ããã³ (III) ã¯ããã¿ã ã©ã®å°åœ±ããšåœç¶åŒã°ããã§ãããŸãããïŒããšç· ãããã£ãŠãããããããäºæå°åœ±ããšããè¡šçŸã®ååºãšèšãããïŒãªãããšã«ã·ã§ãã¯ãã®ããã«æžããŠããããå®éã«ã¯æåã®çºè¡šã§ã¯å述㮠α(α, α) = αα ãã³ã³ãã€ã©ãžã§ãã¬ãŒã¿ã§ãããšã¯æ確ã«è§ŠããŠãããã72幎ãš73幎ã®å ±åãååºã§ããïŒãè±èªã§Futamura Projectionãšããè¡šçŸã䜿ãããã®ã¯ãéšåè©äŸ¡ã«é¢ããåœéäŒè°Partial Evaluation and Mixed Computation (PEMC) ã«ãããŠ1987幎ã®ããšã§ãã£ããååºã®æç®ã¯æ¥æ¬ãœãããŠã§ã¢ç§åŠäŒã®ãã³ã³ãã¥ãŒã¿ãœãããŠã§ã¢ãVol. 21, No. 5ã«äºæãžã®Q&Aãšãšãã«åé²ãããŠãã
äºæå°åœ±ã®æ žå¿ïŒ
éšåè©äŸ¡ã¯ãããã°ã©ã ã®äžéšã®æ å ±ãäºåã«ç¥ã£ãŠããå Žåã«ããã®æ å ±ã䜿ã£ãŠããã°ã©ã ãç°¡ç¥åïŒãŸãã¯æé©åïŒããææ³ã§ããäºæå°åœ±ã¯ãéšåè©äŸ¡ãçšããŠä»¥äžã®3ã€ã®èå³æ·±ãçµæã瀺ããŠããŸãïŒ
ã€ã³ã¿ããªã¿ãšããã°ã©ã ã®éšåè©äŸ¡: ã€ã³ã¿ããªã¿ã«ããã°ã©ã ãåºå®ããŠéšåè©äŸ¡ãè¡ããšããã®ããã°ã©ã ã®ã³ã³ãã€ã«ãããããŒãžã§ã³ãåŸãããšãã§ããã
ã³ã³ãã€ã©ã®çæ: ã€ã³ã¿ããªã¿ã«å¯Ÿããéšåè©äŸ¡èªäœãéšåè©äŸ¡ãããšããã®ã€ã³ã¿ããªã¿ã®ããã®ã³ã³ãã€ã©ãçæããããšãã§ããã
ã³ã³ãã€ã©ãžã§ãã¬ãŒã¿ã®çæ: ããã«ãäžèšã®éšåè©äŸ¡ããã»ã¹èªäœãéšåè©äŸ¡ãããšãã³ã³ãã€ã©ãžã§ãã¬ãŒã¿ãåŸãããšãã§ããã
ãããªãšæã£ããå¿æŽãããïŒ
