以åã®
èšäº ïŒ
en ïŒã§ã1982幎ã«ãã¡ã³ãã¡ãŒãªã³ã®ã³ã°ã®äžã§ââéå§ããã1992幎ã«è«çããã°ã©ãã³ã°ãåãå
¥ããŠæ€åãããã第5äžä»£ã®æ¥æ¬ã®ã³ã³ãã¥ãŒã¿ãŒã·ã¹ãã ãããžã§ã¯ãã®æŽå²ã«ã€ããŠè©±ããŸããã ãã®äžã§ãããæçœãªLispã§ã¯ãªãã第5äžä»£ã·ã¹ãã ã®èšèªãšããŠPrologãã©ã®ããã«éžã°ãããã«ã€ããŠã話ããŸãã ç¹å®ã®èšèªã®æ¯æè
ã圢æã§ãã人ã
ã®çŸè±¡ã«èå³ããããŸãã ãã®èšäºã§èª¬æã§ãããšããã®ã§ããã
çšèªã«ã€ããŠã è«çããã°ã©ãã³ã°ã¯ãè«çæã䜿çšããŠæé ãšããŒã¿ãè¡šããåãåã£ãã¹ããŒãã¡ã³ãã«åºã¥ããŠèšç®ãå®è¡ããæ¹æ³ã§ãã Prologã¯ãããã2ã€ã®ã¢ã€ãã¢ã«åºã¥ããããã°ã©ãã³ã°èšèªã§ãã èšèªãšæ¹æ³ã®äž¡æ¹ãã第5äžä»£ã·ã¹ãã ã§äž»èŠãªåœ¹å²ãæãããŸããã
1981幎ããããžã§ã¯ããéããäŒè°ã§ãããã¯è«çããã°ã©ãã³ã°ãäž»ãªããã°ã©ãã³ã°æ¹æ³è«ãšåŒã³ãŸããã 1992幎ã®æ±ºåæŠã§ãå€å·ã¯1976幎ã«æ±äº¬ã®é»æ°æè¡ç 究æïŒETLïŒïŒåŸã«ç¬¬5äžä»£ã·ã¹ãã ãããžã§ã¯ããç«ã¡äžããïŒã®ããŒã ãLispã§è±å¯ãªçµéšãæã¡ãããããŒã°ã¯åœŒå¥³ã«ã¯ãŸã£ãããªãã¿ããªãã£ãããšãæãåºããã 1976幎ãããã¯å
šå¡ã«åœãŠã¯ãŸããŸããããã«ã»ã€ãŠä»¥å€ã§ã¯ãããããŒã°ã«ã€ããŠç¥ã£ãŠããã®ã¯2ã3ã®ç 究æã ãã§ããã
974ã¯1974幎ã«å·åŽ
[7]ã®èšäºãèªãã åŸãè«çããã°ã©ãã³ã°
[1]ã«èå³ãæã¡ãŸãããããããã1976幎ã«ã¹ã¿ã³ãã©ãŒãç 究æã蚪ãããšãã«å€å·ãPrologãæ€çŽ¢ããããã«ãªããŸããããã«ã»ã€ãŠã®å€ã 1974幎ãããããH.D. ãŠã©ãŒã¬ã³ã¯ãšãã£ã³ãã©ã«ã³ããŒãåããŸããã ãããŠ1976幎ã«ãããªãŒã»ãããŒã¯ãšãã£ã³ãã©ããã³ããŒãã¹ã¿ã³ãã©ãŒãç 究æã«æã¡èŸŒã¿ãŸããã ãŠã©ãŒã¬ã³
[1]ã¯ã ãããªãŒã¯èªåã§ã·ã¹ãã ãèµ·åã§ãããå€å·ã®ã³ããŒãæž¡ããŸããããšèªããŸããã 1976幎ã«æ±äº¬ETLã§ãå€å·ãšä»ã®æ°äººã®ç 究è
ãPrologã®å®éšãéå§ããŸããã ç±³åœã¯ããããŒã°ãŠã€ã«ã¹ã®åªä»ãšããŠè¡åããææèªäœãåé¿ããŸããã
ETLã§ã®ä»äºã®çµæãšããŠãå€å·ã¯ããã€ãã®ããããŒã°ããŒã¿ããŒã¹ã€ã³ããã¯ã¹äœæããã°ã©ã ãå®èšŒããŸããã æããã«ãè¯å®çãªçµæã«ãããETLã¯David H.D.ããDEC-10ã®ããããŒã°ã®å®è£
ãååŸããããšãã§ããŸããã ãŠã©ãŒã¬ã³ã å€å·ã¯æ¬¡ã®ããã«æžãã
[2] ïŒ
DEC-10 Prologã§Rubik's Cubeã¢ã»ã³ããªããã°ã©ã ãäœæããŸããããå¹ççã§ãæ¯èŒççæéïŒçŽ20ç§ïŒã§åé¡ã解決ããŸããã ãã®ã¿ã€ãã®ãšãã¹ããŒãã·ã¹ãã ã§ã¯ãææ決å®ã¡ã«ããºã ã¯ãPrologã®æ«å°Ÿååž°ã䜿çšããŠå¹æçã«å®è£
ãããŸãã ãã®å®éšã®åŸãããããŒã°ã¯ç¥èåŠçèšèªã§ãããšç¢ºä¿¡ããŸããã
ããããŒã°ã®æŽå²ã«ã€ããŠã¯ãã¢ã©ã³ã»ã³ã«ã¡ãã¢ãšãã£ãªããã»ããã»ã«ã®ãããããŒã°ã®èªçã
[3]ã«ç®ãåããŸãã ã æåã®ã¹ãããã¯1971幎ã«ãšã¯ã¹ãã«ã»ã€ãŠå€§åŠã®Colmeroerçããã°ã«ãŒãã«ãã£ãŠè¡ãããŸããã èªç¶èšèªã®åŠçå°çšã«äœ¿çšãããããã€ãã®äºåããŒãžã§ã³ãäœæããåŸã1973幎ã«ãæçµããŒãžã§ã³ããäœæãããŸããã å·åŽã®åœ±é¿ã§ãæã®è«çã¯èšèªã«ãªããç¹å®ã®åœ¢åŒã®æãæç¶ããåŒã³åºãããã®ã¡ã«ããºã ãšããŠæ©èœããŸããã ãã®ããŒãžã§ã³ã¯æåã®ãããããŒã°ããšåŒã°ããèªç¶èšèªåŠç以å€ã®ã¿ã¹ã¯ã«äœ¿çšãããŸããã 1974幎åé ããã«ã»ã€ãŠãžã®ãŽã¡ã¬ã³ã®èšªåã®åŸãããããŒã°ã®ã³ããŒããšãã£ã³ãã©ã«è¡ããŸããã ãšãžã³ãã©ãããšãŒãããã®ããã€ãã®æ©é¢ïŒãããã¹ããã«ãŒãã³ããªã¹ãã³ïŒãšã«ããã«æ¥éã«åºãããŸããã
1974幎ãã1977幎ã«ãããŠãæ°å€ãã®é
åçãªå®éšãè¡ããããã«ã»ã€ãŠã§å§ãŸã£ãäœæ¥ãç¶ããããŸããã ãªã¹ãã³ã®ãã«ããŒã»ã³ãšãŒãªã§ã¯ããããããŒã°ã®ããæ¹ããšããæ¬ã®ããã°ã©ã ãéãå§ããŸããã 1975幎ããŠã©ãŒã¬ã³ã¯DEC-10 Prologã§Prologã³ã³ãã€ã©ã®äœæãéå§ããŸããã 1977幎ã«å®æãããšãã1973幎ã®ãã«ã»ã€ãŠéèš³ã§å€§ããªæ¹åãéæãããããšãå€æããŸããã ãŠã©ãŒã¬ã³ãšåœŒã®ååã¯ããããã³ã³ãã€ã©Lispãšæ¯èŒããããšãæ¢ããŠããŸãããããã¯èžè¡äœåãšããŠå®ç§ã§ãããèå³æ·±ãçµæãåŸãŸããã ãªã¹ãã¯ãLispã®å Žåããã30ã50ïŒ
é«éã«å転ãããŸããã çµæã¯é©ãã¹ããã®ã ã£ãããªããªã ãªã¹ãã¯ãä»ã®çšèªãšåæ§ã«è«ççšèªã«å€æãããçµ±äžçã«åŠçãããŸãã ã·ã³ãã«ã®åŸ®åïŒããŒã¿ã«äŸåïŒã¯ãLispããã1.1ãã2.6åéãå®è¡ãããŸããã 1977幎ãLispã¯18æ³ãããããŒã°ã¯6æ³ã§ã1971幎ãã1977幎ãŸã§ã®éçºã«åãçµãã 人ã¯ã»ãã®äžæ¡ãã§ããã
次ã®äŸã¯ãæŠããŠã圹ã«ç«ããªãã ãããã¯ãããããŒã°ã®é
åçãªæ§è³ªã瀺ãããã«éžã°ããŸãã
è¿°èªãmoveãã®ããã°ã©ã ã¯ãã ãŒãïŒX1ãY1ãX2ãY2ïŒãèšè¿°ãããšãã«ã銬ãã»ã«ïŒX1ãY1ïŒããã»ã«ïŒX2ãY2ïŒã«ç§»åã§ããããšãæå³ãããšããŸãã
é©åãªããã°ã©ã ãæã£ãŠãããããªãã¯å°ããããšãã§ããŸã
?- move (U,U,V,V).
ããã¯ãã1åã®ç§»åã§éŠ¬ãã»ã«ã®1ã€ã«æãã«è¡ãããããšãæå³ããããããããšããçããåŸãããšãã§ããŸãã
å°ãããããšã
?- move(U,U,X,Y),move(X,Y,V,V).
ãéšå£«ã¯2åã®åãã§æãã«åãããšãã§ããŸãããšããæå³ã§ãå¿
èŠã«å¿ããŠãã¹ãŠã®åãã§ãã¯ãããšçããŸãã 次ã¯ããã°ã©ã ã§ã
move(X1,Y1,X2,Y2) :- diff1(X1,X2),diff2(Y1,Y2).
move(X1,Y1,X2,Y2) :- diff2(X1,X2),diff1(Y1,Y2).
% diff1(X,Y): X Y 1.
diff1(X,Y) :- succ(X,Y).
diff1(X,Y) :- succ(Y,X).
% diff2(X,Z): X Z 2.
diff2(X,Z) :- succ(X,Y),succ(Y,Z).
diff2(X,Z) :- succ(Z,Y),succ(Y,X).
% succ(X,Y): Y X.
succ(1,2). succ(2,3). succ(3,4). succ(4,5). succ(5,6). succ(6,7). succ(7,8).
å¥ã®äŸã 次ã®ãªã¹ãã«å«ãŸãã27æ¡ã®ã»ããããããšããŸã
[1,9,1,6,1,8,2,5,7,2,6,9,2,5,8,4,7,6,3,5,4,9,3,8,7,4,3]
[1,9,1,2,1,8,2,4,6,2,7,9,4,5,8,6,3,4,7,5,3,9,6,8,3,5,7]
[1,8,1,9,1,5,2,6,7,2,8,5,2,9,6,4,7,5,3,8,4,6,3,9,7,4,3]
[3,4,7,9,3,6,4,8,3,5,7,4,6,9,2,5,8,2,7,6,2,5,1,9,1,8,1]
[7,5,3,8,6,9,3,5,7,4,3,6,8,5,4,9,7,2,6,4,2,8,1,2,1,9,1]
[3,4,7,8,3,9,4,5,3,6,7,4,8,5,2,9,6,2,7,5,2,8,1,6,1,9,1]
åæ¡d = 1ã..ã9ã®æ¡ä»¶ã§ã¯ã3ã€ã®dã®åºçŸããããdã¯dã®äœçœ®ã§äºãã«åé¢ãããŠããŸãã ããã解決ããã«ã¯ãããªãè€éãªã¯ãšãªãå¿
èŠã§ã
?-equals(List,
[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]),
sublist([9,_,_,_,_,_,_,_,_,_,9,_,_,_,_,_,_,_,_,_,9],List),
sublist([8,_,_,_,_,_,_,_,_,8,_,_,_,_,_,_,_,_,8],List),
sublist([7,_,_,_,_,_,_,_,7,_,_,_,_,_,_,_,7],List),
sublist([6,_,_,_,_,_,_,6,_,_,_,_,_,_,6],List),
sublist([5,_,_,_,_,_,5,_,_,_,_,_,5],List),
sublist([4,_,_,_,_,4,_,_,_,_,4],List),
sublist([3,_,_,_,3,_,_,_,3],List),
sublist([2,_,_,2,_,_,2],List),
sublist([1,_,1,_,1],List).
ãã ããããã°ã©ã èªäœã¯éåžžã«å°ãããäžè¬çãªè¿°èªã®ã¿ãå«ãŸããŠããŸãã
% sublist(X,Y) X Y
sublist([],List).
sublist([X|Xs],[X|Ys]) :- append(Xs,_,Ys).
sublist(List,[Y|Ys]) :- sublist(List,Ys).
append([],Y,Y).
append([U|X],Y,[U|Z]) :- append(X,Y,Z).
equals(X,X).
ããããŒã°ã®åæã®æŽå²ã¯ãç§ã«ãšã£ãŠéåžžã«èå³æ·±ãããã§ãããŒããã6幎ã®ã»ãã®æ°äººãããããšã¬ã¬ã³ãã§åŒ·åã§å¹æçãªèšèªã«çºå±ãããŸããã Lispã®åæã®æŽå²ã¯ããã»ã©é¢çœããããŸããã 1950幎代ãããã«ãŒã·ãŒã¯
顧åãããžã§ã¯ãã«èšèªãéžæããŸããã åè£è
ã¯ãIBMã®BacusããŒã ã«ãã£ãŠéçºãããIPL-V NewwellãšSimonããã³Fortranã³ã³ãã€ã©ãŒã§ããã IPLã«ã¯ããªã¹ãã§è¡šãããæè»ãªããŒã¿æ§é ãšããå©ç¹ããããŸããã äžæ¹ãMcCarthyã¯ããã®å埩ã¡ã«ããºã ã®ããã«Fortranã奜ãã§ããã ããã§åœŒã¯ããªã¹ãã®æäœããµããŒãããFortranã³ã³ãã€ã©ãŒã®ããŒãžã§ã³ã§ããFLPLïŒFortranãªã¹ãåŠçèšèª-Fortranãªã¹ãåŠçèšèªïŒãäœæããããã®å®éšãéå§ããŸããã Fortranã§ã®ãŠãŒã¶ãŒå®çŸ©é¢æ°ã®ãµããŒãã¯ãææžåãããŠããªãå®è£
æéã®é·ãããããã£ã§ãããé¢æ°æ¬äœã¯1è¡ã«å¶éãããŠããããšãæãåºããŠãã ããã åœç¶ã®ããšãªãããããã«ãŒã·ãŒã¯èªåã®ãªã¹ãåŠçèšèªã§äœæ¥ãå§ããŸããã 1958幎11æãéèš³ã¯ãã§ã«MITã§åããŠããŸããã ããã«ãçŸåšLispãšããŠç¥ãããŠããèšèªã«é²åããŸãããããã¯ããããžã§ã¯ãã®èª¬æã®äœæ¥ã®å¯äœçšã§ããã
ãã®èšèªã®ç¹åŸŽã®1ã€ã¯ããã®æ®éæ§ã§ãããã€ãŸããååãšããŠèšç®ããããã¹ãŠãèšç®ããããšã¯å¯èœã§ããããã ãŠãããŒãµã«ãã¥ãŒãªã³ã°ãã·ã³ã®ããã°ã©ã ããã¢ã³ã¹ãã¬ãŒã·ã§ã³ãšããŠäœ¿çšãããŸããã å€ãã®äººã
ã¯ãããã«ãŒã·ãŒãååž°é¢æ°ã®çè«ããæ®éçãªé¢æ°ã奜ãã ãšããäºå®ã奜ãã§ãã ãããŸã§ã¯ããã®çè«ã¯èªç¶æ°ã®ã»ããå
ã§ã®ã¿äœ¿çšãããŠããŸããã McCarthyã¯ãã»ããã®èªç¶ãã¯å¶éã§ã¯ãªããåæãããã»ããã§æ©èœããããšãææããŸããã ããããã¹ãŠããã·ã³ããªãã¯åŒïŒSåŒïŒäžã®é¢æ°ã®æ±çšé¢æ°ã«ã€ãªãããŸããã
æ±çšé¢æ°ã¯ãåŒæ°ãšããŠé¢æ°ã®èª¬æãšãã®åŒæ°ã®èª¬æãåããŸããã ãã®çµæã圌女ã¯åŒæ°ã§é¢æ°ãå®è¡ããçµæãè¿ããŸããã ãã®ãããªé¢æ°ãäœæããã«ã¯ãé¢æ°å®çŸ©ã®æ§æãå€æŽããå¿
èŠããããŸããã ããŒã¿ã䜿çšããŠèª¬æããå¿
èŠããããŸããããçŸåšã¯SåŒã§ãã
... EVALã«ã€ããŠèª¬æããããã«ã€ããŠå
¬éããåŸãSteve Russellã¯ããªãEVALãããã°ã©ã ããŠéèš³ãäœæããªãã®ããšå°ããŸããã çè«ãšå®è·µãæ··åããªãã§ãã ãããEVALã¯èšç®ã§ã¯ãªãèªã¿åãã®ããã§ãã ãããã圌ã¯ç¶ããŠéèš³ãããŸããã 圌ã¯ç§ã®èšäºã®EVALã704è¡ã®ãã·ã³ã³ãŒãã«ã³ã³ãã€ã«ãããã°ãä¿®æ£ããLispã€ã³ã¿ãŒããªã¿ãŒã«ã€ããŠå®éã«ãããäŒããŸããã äžè¬çã«ããã®ç¬éãããLispã¯ç§ãã¡ãä»æ¥ç¥ã£ãŠãã圢åŒãSåŒã®åœ¢åŒïŒ1974幎ã®McCarthyãšã®äŒè©±ã§ãããThe Lisp Storyãã®è»¢åã®Stoyan [5]ã«ãã£ãŠåŒ·èª¿ããã圢åŒïŒãç²åŸããã
McCarthyã¯åœŒã®èšäºã§ãS-expressionã®å°ããªæäœã»ãããATOMãEQãCONSãCARãCDRã«ã€ããŠèª¬æããŸããã ãããã«ã圌ã¯è«çé¢æ°ãšããŠQUOTEãšCONDãè¿œå ããŸããã LABELãšLAMBDAã®ã¹ããŒã¿ã¹ã¯éåžžã«èå³æ·±ããã®ã§ããEVALã¯ãªã¹ããæžãæããŠãªã¹ãã«ã¢ãã ãšããŠè¡šç€ºãããããLABELãšLAMBDAãããã»ã¹ã§äœ¿çšãããŸãã
æ®éçãªããã«ãŒã·ãŒé¢æ°ã¯ãèšç®ææ³ã®ãšã¬ã¬ã³ããªå
¬çåãšèããããšãã§ããŸã
[8] ã ããããçè«çãªç 究ã¯Lispã«ãªããŸããã æ±çšé¢æ°ã«ããèšèªãå€æŽãããããŒã¿ã ãã§ãªãé¢æ°ããªã¹ãã«ãªããŸããã ã©ãã»ã«ã®ã€ã³ã¹ãã¬ãŒã·ã§ã³ãšããã°ã©ããšããŠã®åœŒã®èœåã®ãããã§ãæ®éçãªæ©èœã¯éèš³ã«ãªããŸããã
ãªã人ã
ãPrologã«æãããã®ããšãã質åã«çããããã«ãç§ã¯ããã€ãã®äŸãããè¯ããã®ãæãã€ããŸããã§ããã Lispã«ã¯ãã£ãšè¯ãæ¹æ³ããããŸãããŠãããŒãµã«EVALé¢æ°ãšãã®åé¢äžå¯èœãªAPPLYé¢æ°ã調ã¹ãŠãã ããã ãããã¯ãLispã®èª¬æã®æåã«ãããŸãã ããããã³ãasinorum
[9]ã§ããç 究ãæŸæ£ãã人ã
ã¯ããŸãã«ãã®å Žæã§ãããæŸæ£ããããã«æããŸãã æ©ãæž¡ã£ãåŸãåå¿è
ã¯æåŸãŸã§æ
ãç¶ããLispã®æ¯æè
ã«ãªããŸãã
LispãšPrologã®çŸåŸ³ã®é¡äŒŒç¹ã¯ãåžžã«è°è«ã®å¯Ÿè±¡ãšãªã£ãŠããŸãã Lispã§Fortranããã°ã©ã ãæžããŠãã人ãããã³ãã¬ãŒãããµããŒãããPascalãªã©ã®ããããŒã°ã䜿çšããŠãã人ã®äœæãç¡èŠããŸãã èŠããã«ãããã«ãŒã·ãŒãããã«ãçªçµããšåŒãã ãã®ãã¹ãŠ
[4]ã¯ç¡èŠãããã¹ãã§ãã ãã®è°è«ã§ã¯ãZenèšèªã®ç¥èã§æžãããã³ãŒãã®ã¿ãæ€èšãã䟡å€ããããŸãã Zen Prologã®èª¬æã¯å¥ã®æ©äŒã«æ®ããŸãã Lispã®å Žåã次ã®ããã«ãªããŸãã
çŸä»£ã®èŠ³ç¹ãããããã«ãŒã·ãŒãè¡ã£ãäž»ãªããšã¯ãä»®æ³ãã·ã³ã®å®çŸ©ã§ãã äžè¬ã«ã圌ã¯æèå®éšäžã«åã«èª¬æç®çã§ãããå®çŸ©ããŸããã ãããã£ãŠã圌ã¯è«ççãªèŠ³ç¹ããå¯èœãªéãåçŽåããäœè£ããããŸããããªã¹ãã§åäœãã7ã€ã®ããªããã£ãã®ãã¡ïŒãªã¹ããšSåŒã®éãã¯ç¡èŠïŒãé ãšå°Ÿã ãã§æ§æãããŠããŸãã é©ãã¹ãããšã«ããããã¯ãã¹ãŠãåœæå®è£
ã§ããèšèªã«æé·ããŸããã ããã«èå³æ·±ãã®ã¯ãéåžžã«åçŽãªä»®æ³ãã·ã³ãäœå幎ã«ãããã£ãŠã¡ã¢ãªãšããã»ããµã®é床ãåäžãããŠããããšã§ãã ãã®ä»®æ³ãã·ã³ã«åºã¥ããŠããã¹ãŠã®EVAL / APPLYã€ã³ã¿ãŒããªã¿ãŒãæ§ç¯ãããŸããããã¯ãLispå
¥éã³ãŒã¹ã§èŠã€ããããšãã§ããŸãã
åå¿è
ãZen of LispãåŠã¶ãšããã«ãåºæ¬çãªã€ã³ã¿ãŒããªã¿ãŒã®éãããæ©èœã®æ¡åŒµãšããŠããã°ã©ã ãæžãããšã¯èªç¶ã«ãªããŸãã ãããŠããããã®7ã€ã®ããªããã£ãã¯åãããŠããããéèš³ãçµäºãããšããã«èŠããªããªããŸãã ããã©ãããããããã¯ãŠãŒã¶ãŒã³ãŒãã§ã¯éåžžã«äžè¬çã§ãã ã®ã«ããŒãã¯éåè«ã®å察è
ã«èšã£ãïŒã誰ãç§ãã¡ã«ã«ã³ããŒã«ã«ãã£ãŠäœããã楜åãå»ãããšã匷å¶ããªãã ãããã Lispersã¯McCarthyã«ãã£ãŠäœæããã楜åã«é¢ããŠåãããšãçµéšããŸãã
第5äžä»£ã®ãããžã§ã¯ãã¯ãLispãç¥ã£ãŠãããPrologãèå³ããããæ¬æ°ãã§ãããšèªèãã人ã
ã«ãã£ãŠéå§ãããŸããã æ°äžä»£ã®ã³ã³ãã¥ãŒã¿ãŒã®ããžã§ã³ïŒãŸãã¯miæ°æ¥ŒïŒã¯ãè«çèšç®ãšäžŠåæ§ã«åºã¥ããŠãããããæèŠã®ãã©ã³ã¹ãPrologã«ç§»è¡ããŸããã ãããããéã£ãŠãããã第5äžä»£ã·ã¹ãã ã®éåœã¯Lispã«äœã®åœ±é¿ãåãŒããªãã£ãã ããïŒããã¯ãã§ã«åºãŸã£ãŠããã ãããæŽå²çã«ãPrologã®è匱ã§åæã®åžæã¯ãç®æšãéæããªãã£ã第5äžä»£ã·ã¹ãã ã®åŽ©å£ãšãšãã«åŽ©å£ããŸããã