Nikodemusã®Common Lisp FAQ
æçµæŽæ°ïŒ2012-04-13
ããã¯éåžžã«éå
¬åŒã®Common Lisp FAQã§ãNikodemus Siivolaã®äž»èŠ³çãªæèŠãåæ ããŠããŸãã ãã®ããã¹ãã¯ãã€ã³ã¿ãŒãããããã³comp.lang.lispã«ããä»ã®FAQã«äžéšåºã¥ããŠããŸãã
ããªããç§ãããªãã®ããã¹ãã䜿ã£ããšæããªããç§ã¯ãããèªããŠããããã®ã§ãnikodemus @ random-state.netã«æžããŠãã ããã
ãã®FAQã®çŸåšã®ããŒãžã§ã³ã¯ã次ã®ã¢ãã¬ã¹ã§å
¥æã§ããŸãã
http://random-state.net/files/nikodemus-cl-faq.txthttp://random-state.net/files/nikodemus-cl-faq.htmlFAQã¯comp.lang.lispã§ãå®æçã«å
¬éãããŠããŸãã
æåã®
Common Lisp CLïŒ ã¯ãªã¹ãïŒ LispïŒ
ãCommon Lispãã¯ãANSIã«ãã£ãŠæšæºåãããèšèªã®ååã§ãã
ãCLãã¯ã以åã®ååã®æã奜ãŸããçç¥åœ¢ã§ãã
ãClispãã¯Common Lispå®è£
ã®1ã€ã®ååã§ãããããé©åãªç¥èšã§ã¯ãããŸããã
ãLispãã¯ãCLãå±ããèšèªã®ã«ããŽãªã§ãã
ãLISPãã¯çŽ20幎éæžãããªããªããŸãããCommonLispã¯Lispãšç¥ãããããšããããããŸãã
ã³ã³ããã¹ãããæ£ç¢ºã«äœãè°è«ãããŠããããæããã§ãã
ããã§äœïŒ
ããã§èšèªã«ã€ããŠèªãããšãã§ããŸãïŒ
http://random-state.net/features-of-common-lisp.htmlCommon LispãåŠã¶ã«ã¯ïŒ
- Common Lispã«é¢ããè¯ãæ¬ãèªãã§ãã ããã
- ããã䜿ãå§ããŠãã ããã
å€ãã®äººã
ã¯ãæåã®éãè€æ°å蟿ãããšããŸããã2çªç®ã®éã¯å¿ããŸãã
ãŸããçå®ã¯ãããªããããã䜿ãå§ããªããã°èšèªã§ããã°ã©ã ããããšãåŠã¶ããšãã§ããªããšããããšã§ãã ãããŠãããªã倧ããªããã°ã©ã ã§äœæ¥ããªããšãäžè¬ã«å€ãã®ããšãæ£ããç解ããããšã¯äžå¯èœã§ãã
åé¿ãã¹ãèœãšãç©Žã¯äœã§ããïŒ
åªããæ¬ã¯ãèšèªã®æ©èœãšããªãã¯ã«ã€ããŠèª¬æããŸãããå€ãã®äººãã€ãŸããå¿ççããã³ç€ŸäŒçãªãã€ã³ããããã€ããããŸãã
- Lispãã¯ããåŠã¶ã®ã¯ããããã
Lispãã¯ãã¯ã¯ãŒã«ãªãã®ã§ãããåå¿è
ã«äžããåã¯ãã°ãã°æ··ä¹±ãæããŸãã
å€ãã®å Žåãåé¡ã®çç¶ã¯ããããè¡ãããçç±ãæ確ã«ç解ããã«äœããå®è¡ããããšããããšã§ãã ãã¯ãã䜿çšããŠå®è¡ã§ããããšã¯ãã¹ãŠããã¯ããªãã§å®è¡ã§ããããšãå¿ããªãã§ãã ããã ãã¡ãããããã¯ããã»ã©å®çšçã§ã¯ãªããããããŸãããããã®èšæ¶ã¯å€©ããå°ã«äœäžããŸãã
èµ°ãããšãåŠã¶åã«ãæ©ãããšãåŠã¶ã ç¹ã«ãã以æ¥ãé£ã¶ããšãã§ããŸãã - Lispã¯å®ç§ã§ã¯ãªããããã¯ãã¥ãŒã¹ã§ã¯ãããŸããã
Lispã«æåŸ
ãå¯ãã人ãããŸããããã£ããããŠããŸãã ä»ã®äººã¯ãLispãXèšèªãšæ¯èŒããåè
ãäœãã«è² ããŠããããšãçºèŠããŸãã
ã©ã¡ããæ£ããæšè«ããåççãªäž»åŒµãããããšãã§ããŸããããããã®äººã
ãã©ãããããšãã°#lispã§äž»åŒµã鳎ããå§ãããšåé¡ãå§ãŸããŸãã
æšè«ãæ£ããå Žåãåé¡ã¯ãã§ã«100åè°è«ãããŠããå¯èœæ§ãé«ãã誰ããããåè°è«ããåãåžæãæã£ãŠããŸããã
è°è«ãééã£ãŠããããå®éãããçè«çã§ããå Žåãæ¯å¹Žäžæºãæã£ãŠããæ°åè
ããã®ãããªè³ªåã絶ããæèµ·ãããšããäºå®ã«ããããããã誰ãåè°è«ããåã欲æ±ãæã£ãŠããŸããã
ããã¯ãã€ã³ã¿ãŒãããäžã§Lispã«ã€ããŠæªå£ãèšãããšãçŠããŠãããšããæå³ã§ã¯ãããŸãããã...åå¿è
ã®å Žåã¯ããã¹ãŠãæªããšèšã£ãŠã人ã
ãäž¡æãåºããŠæ¥ãããšãæåŸ
ããªãã§ãã ããã ããšãããªããçŸåæ£ãããšããŠãã
ã³ãã¥ããã£ã®ããã«å€ãã®ããšãè¡ã£ãŠããé«éœ¢è
ããã®èŠæ
ã«ã¯ããã£ãšå€§ããªéã¿ããããŸãã - çµéšè±å¯ãªå
Œ
±ã®çèŽè
ã¯å€ãã®ããã«ãèŠãŸãã
ããããã®ãããªãŒïŒ æžæãåå¿è
ã¯æã
ããã«ã®ããã«èŠããŸãããããã¯ã»ãšãã©ã®å Žåãã»ãšãã©ã®ããã«ãLispã®åå¿è
ãè£
ãããã§ãã
ãããã£ãŠã人ã
ã¯ããªããããã«ã§ãããšèããããã«å¿ããŠå¯Ÿå¿ãããããããŸããã
ãããé¿ããæåã®æ¹æ³ã¯ç€Œåæ£ããããããšã§ãã 誰ããããªããééã£ãŠããããŸãã¯ééã£ãŠãããšèšã£ãå Žåã圌ãæ£ãããããŸãã¯ããªããééã£ãŠãããééã£ãŠããå¯èœæ§ãé«ããšèããŠãã ããã
ã©ã®æ¬ããå§ããŸããïŒ
Peter Seibelã«ãããPractical Common LispãïŒPCLãšãåŒã°ããŸãïŒããå§ããŸãã ããã°ã©ãã³ã°èšèªãæ¢ã«ç¥ã£ãŠããå Žåãããã¯è¯ãåºçºç¹ã§ãã ãã®æ¬ã¯ãé»å圢åŒããã³å°å·åœ¢åŒã§å
¥æã§ããŸãã
http://www.gigamonkeys.com/book/å¥ã®è¯ãæ¬ã¯ãCommon LispïŒAç©ãããªã·ã³ããªãã¯èšç®å
¥éãDavid Touretzkyã§ãã ããã°ã©ãã³ã°ã®åå¿è
ãŸãã¯PCLãè€éããããšæãã人ã¯ããã®æ¬ãèªãã¹ãã§ãã ããããå§ããå Žåãããã§ãPCLãèªãã§ãã ããã ãã§ã«PCLãèªãã§ãã¹ãŠãç解ããŠããå Žåã¯ããããå®å
šã«ã¹ãããã§ããŸãã ãã®æ¬ã¯ãé»å圢åŒããã³å°å·åœ¢åŒã§å
¥æã§ããŸãã
http://www.cs.cmu.edu/~dst/LispBook/index.htmlè¯ãæ¬ã¯ãŸã ãããããããŸãããããã2ã€ã¯åå¿è
ã«æé©ã§ãã Lispã®åå°ã¯æªããããŸããããç§ã®è¬èãªçµéšã§ã¯èª€è§£ã圢æããå¯èœæ§ããããŸãã ããã§å§ãããªãããšã«ããPCLãèªãã§ãã ããã
èšèªä»æ§ã®é»åããŒãžã§ã³ã§ããHyperspecãŸãã¯CLHSãå¿
ããã§ãã¯ããŠãã ããã ããã¯åãªã貎éãªãªãã¡ã¬ã³ã¹ã§ãã
http://www.lispworks.com/documentation/HyperSpec/index.htmlããã«ã¬ã€ããèªãããã«æ¥ããªãã§ãã ããã ãããã©ãã«ããããç¥ã£ãŠããã ãã§ãCLã«ã€ããŠèãããããã¹ãŠã®è³ªåã«å¯Ÿããå
¬åŒã®åçãå«ãŸããŠããŸãã ããã¯ãç¹å®ã®ãªãã¬ãŒã¿ãŒãäœãããŠããããç¥ãã®ã«æé©ãªå Žæã§ãã ããã«ãå¿
èŠãªæ©èœãèšèªã§å®è£
ãããŠãããã©ããã調ã¹ãããã«èª¿ã¹ã䟡å€ããããŸãã
ãŸããå®è£
ã«ä»å±ã®ããã¥ã¡ã³ããç¡èŠããªãã§ãã ããã SBCLã®å Žåãããã¥ã¢ã«ã¯æ¬¡ã®å Žæã«ãããŸãã
http://www.sbcl.org/manualã©ã®å®è£
ãæ¡çšããã°ããã§ããïŒ
å¿
èŠãªãã®ã«äŸåããŸãããå§ããã°ããã®å Žåã¯é¢ä¿ãããŸããã ãã ããç¹å®ã®ã°ã«ãŒãããã®æ¯æŽãåŸ
ã£ãŠããå Žåã¯ããã®ã°ã«ãŒãã䜿çšããå®è£
ã䜿çšããŠãã ããã
åŠç¿ããã«ã€ããŠãæ
å ±ã«åºã¥ããéžæãã§ããããã«ãªããŸãã å®è£
éã®ç§»è¡ã¯ããã»ã©é£ãããªãã®ã§ãããã¯çã¿ã䌎ãçãã®åå ã§ã¯ãããŸããã
ç§ã¯SBCLã«éåžžã«äžæºã§ãã
http://www.sbcl.org/SBCLã¯ããªãŒãã³ãœãŒã¹ãä»å±ããå€ãã®ãã©ãããã©ãŒã ïŒWindowsãå«ãïŒã§å®è¡ãããã³ã³ãã€ã©ãå«ãŸããANSIäºææ§ãéåžžã«çå£ã«èããäžè¬ã«äžçã«åã³ãšå¹³åããããããããåªããŠããŸã...ç§ã¯SBCLã®éçºè
ã®1人ã§ãããç§ã®äŒç€Ÿã§ãã
Steel Bank Studio Ltdã¯åœŒã«åæ¥çãªãµããŒããæäŸããŠããããšã«èšåããŠãã ããã
äœããã®çç±ã§SBCLãããªãã«åããªãå Žåã¯ã次ã®ãªã¹ããæ€èšããããšãææ¡ã§ããŸãã
éãïŒ
- Clozure CL
- CMUCL
- ã¯ãªã¹ã
- Abcl
- ECL
ã³ããŒã·ã£ã«ïŒ
- Lispworks
- Allegro CL
- ç§åŠè
ã©ã€ãã©ãªã¯ã©ãã«ãããŸããïŒ CPANãŸãã¯RubyGemsã®é¡äŒŒç©ã¯ãããŸããïŒ
QuickLispã¯RubyGemsã«éåžžã«äŒŒãŠããŸãïŒ
http://www.quicklisp.org/倧éã®ã©ã€ãã©ãªãæäŸãããããã®éã®äŸåé¢ä¿ã管çããŸãã ããã¯éåžžã«å¿
èŠãªããŒã«ã§ãã
CPANã«æãè¿ãã®ã¯ãClikiããšãcommon-lisp.netãã§ãã
http://www.cliki.net/http://www.common-lisp.net/...ããããæ¬åœã«è¯ããã®ã¯ãããŸããã
䜿çšããIDE
SBCLã䜿çšããå Žåã¯ãEmacsãšSlimeã䜿çšããŠãã ããã
http://www.common-lisp.net/project/slime/Emacsã䜿çšããããšããªãå Žåã§ããåªåããŠSlimeã䜿çšããŠãã ãããåŠç¿æ²ç·ã¯ããã»ã©æ¥ã§ã¯ãªãããã¹ãŠã®ã³ãã³ãã¯ã¡ãã¥ãŒããã¢ã¯ã»ã¹ã§ããŸãã
Quicklispã䜿çšããŠSlimeãæ§æã§ããŸãã以äžã®ãç°å¢ã®ã»ããã¢ããæ¹æ³ãã»ã¯ã·ã§ã³ãåç
§ããŠãã ããã
Mx slime-cheat-sheet
ã§èª¿æ»ãéå§ã§ããŸãããããã¯ã¹ã©ã€ã æ©èœã®ã»ãã®äžéšã§ãã
å¥ã®å®è£
ã䜿çšããŠããå Žåã¯ãéçºè
ãæšå¥šããIDEã䜿çšããŠãã ããïŒãã ããSlimeã¯ã»ãšãã©ãã¹ãŠã®å®è£
ã§åäœããŸãïŒã
Lispã§ã®å®çšçãªäœæ¥ã®ããã«ããšãã£ã¿ã¯å°ãªããšã次ã®ããšãè¡ãå¿
èŠããããŸãã
- Lispã³ãŒãã®è©°ãŸããæ£ããæŽçããŸãã
- ãã¢æ¬åŒ§ãç解ããŸãã
- ã³ãã³ãå®çŸ©ã®ç·šéãå®çŸ©ã®ã³ã³ãã€ã«ãåŒã®è©äŸ¡ãã·ã³ãã«ã®èšè¿°ãé¢æ°ã®éã¢ã»ã³ãã«ãé¢æ°ã®ãã¬ãŒã¹ãåŒã®æ€æ»ãããã³Lispãšå¯Ÿè©±ããä»ã®ã³ãã³ããå®è¡ã§ããããã«ããŸãã
- ãããã¬ãŒãšå¯Ÿè©±ããŸãã
- ã€ã³ã¹ãã¯ã¿ãŒãšå¯Ÿè©±ããŸãã
ã¹ã©ã€ã ã¯ãäžèšã®ãã¹ãŠãå®è¡ã§ããŸãã
ViïŒmïŒã奜ããªããVimãCommon Lispã§æžãããSlimeããŒãã«ãªã³ã¯ããSlimvããã§ãã¯ããŠãã ããïŒ
http://www.vim.org/scripts/script.php?script_id=2531https://bitbucket.org/kovisoft/slimv/http://kovisoft.bitbucket.org/tutorial.html...ããããVim / Slimvã䜿çšããŠããªããããä¿èšŒã§ããŸããã
ç°å¢ãã»ããã¢ããããæ¹æ³ã¯ïŒ
SBCLã®å
¥æãSlimeãQuicklispã®ã»ããã¢ããã«é¢ããè¯ãã¬ã€ãïŒå·çæç¹ïŒã¯ããã«ãããŸãïŒ
http://mohiji.nfshost.com/2011/01/modern-common-lisp-on-linux/http://mohiji.nfshost.com/2011/01/modern-common-lisp-on-osx/Windowsã§Clispãæ§æããããã®ã¬ã€ãã©ã€ã³ã ãã ããåºå€§ãªãã®ãåãå
¥ããããšã¯ã§ããŸããã
http://mohiji.nfshost.com/2011/01/modern-common-lisp-on-windows/GUIã¯ãããŸããïŒ
ã¯ãããããã 誰ãã䜿çšããGUIã¯ãããŸããã
ã»ãšãã©ã®åçšLispã«ã¯GUIã©ã€ãã©ãªãä»å±ããŠããããããã®å®è£
ã®æ¯æè
ã¯æäŸãããã©ã€ãã©ãªã奜ãããã§ãã ãã ãããã®ãããªã©ã€ãã©ãªã®ã³ãŒãã¯ãLispã®éã§ç§»æ€ã§ããŸããã åçšå®è£
ã䜿çšããŠããŠãã³ãŒãã®ç§»æ€æ§ã«é¢å¿ããªãå Žåã¯ãéçºè
ãæäŸããããŒã«ãéžæããŠãã ããã ã©ã€ãã©ãªã®äœææ¹æ³ã«å¿ããŠãã³ãŒããç°ãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ç§»æ€ã§ããŸããããã¯ãããããŸãã«å¿
èŠãªãã®ã§ãã
ãªãŒãã³ãœãŒã¹ãã£ã³ãã«ã¯ããã€ãã®è§£æ±ºçããããŸãã
CommonQtã¯ãCommon LispãQtã®ã¹ã¢ãŒã¯ã©ã€ãã©ãªã«ãã€ã³ããããã®ã§ãã
http://common-lisp.net/project/commonqt/LTKã¯Tkã®äžã«æ§ç¯ãããŸãã
http://www.peter-herth.de/ltk/CL-GTK2ãšCLGã¯GTK +ã«ãã€ã³ããããŠããŸããããããã®éçºã®çŸç¶ã«ã€ããŠã¯äœãèšããŸããã GTKãµãŒããŒãèŠã䟡å€ããããŸãã
http://common-lisp.net/project/cl-gtk2/http://sourceforge.net/projects/clg/ http://www.gtk-server.org/CLIMïŒCommon Lisp Interface ManagerïŒã¯ãGUIçšã®ã»ãŒæšæºåãããAPIä»æ§ã§ãããäžèšã®GUIãšã¯ãŸã£ããç°ãªããŸãã ãã¹ãŠã芪ãã¿ãããç解ã§ãããšæåŸ
ããªãã§ãã ããã
http://random-state.net/files/how-is-clim-different.htmlå€ãã®äººã¯ããããGUIãæ§ç¯ããã®ã«æé©ã§ãããšæèšããŸãããä»ã®äººã¯ããããŸã£ãããªãããšã䞻匵ããŠããŸãã ã»ãšãã©ã®åçšLispã«ã¯CLIMãå®è£
ãããŠããŸãããMcCLIMãšåŒã°ããããŒã¿ãã«ãªãªãŒãã³ã©ã€ãã©ãªããŸã ãããŸãããæè¿ã¯ããŸãéçºãããŠããŸããããéåžžã«äŸ¿å©ã§ãã
http://common-lisp.net/project/mcclim/CLXã¯ãX11ã«å¹æµããæœè±¡åã¬ãã«ãæäŸãããX11ãžã®ç§»æ€å¯èœãªäœã¬ãã«Lispã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
http://www.cliki.net/CLXhttps://github.com/sharplispers/clxGUIã®åé¡ã«å³å¯ã«å¶éãããŠããªãå ŽåãOpenGLãGLUãããã³GLUT APIãžã®ç§»æ€å¯èœãªãã€ã³ãã£ã³ã°ã§ããCL-OPENGLã«ã€ããŠèšåããªããã°ãééã£ãŠããŸãã
http://common-lisp.net/project/cl-opengl/ã©ããªãã©ãŒã©ã ããããŸããïŒ
ãã¡ãããã©ãŒã©ã ã§ã¯ãããŸããããCommon Lispã®ããã°ã¢ã°ãªã²ãŒã¿ãŒã§ããPlanet LispããããŸãã ããããã®èå³æ·±ãæ
å ±ããéå°ã«ãããŸããã
http://planet.lisp.org/LispForumã¯ã¡ããã©è¯ããã©ãŒã©ã ã§ãã
http://www.lispforum.com/ããããç§ã¯é »ç¹ã«è¡ã£ãããšããªãã®ã§ãä¿èšŒããŸããã
Usenet / Googleã°ã«ãŒãã«ã¯ãŸã comp.lang.lispã°ã«ãŒãããããŸããããããŒã«ãå¯éããŠããŸãã ããã«æžããŠããèè
ã¯éåžžã«èªã¿æžããã§ããŸãããäžæ¬ãªæ¶æž¬ã¯æ®éã®åºæ¥äºã§ãã ãããã®ã°ã«ãŒããèªãã®ã¯é£ãããããããŸããããLispã䜿çšããããã«ããããèªãå¿
èŠã¯ãããŸããã
http://groups.google.com/group/comp.lang.lispå°éã®ã¡ãŒãªã³ã°ãªã¹ãã¯ãS / Næ¯ãã¯ããã«åªããŠããŸãã ãã¹ãŠã®å®è£
ã¯ãç¬èªã®ãŠãŒã¶ãŒãäœæããã¡ãŒãªã³ã°ãªã¹ããåç
§ããããšããŸãããã»ãšãã©ã®ã©ã€ãã©ãªãç¬èªã®ã¡ãŒãªã³ã°ãªã¹ããäœæããŸãã SBCLã®å Žåãããšãã°æ¬¡ã®ãšããã§ãã
https://lists.sourceforge.net/lists/listinfo/sbcl-helpãªãŒãã³ãœãŒã¹ã®éçºè
ãšãŠãŒã¶ãŒã®éã§ã¯ãfreenode.orgã®#lispãã£ã³ãã«ã人æ°ã§ãã ãã ããïŒlispã¯ãã®ãããã¯ã«éåžžã«å³ããé å®ãæã£ãŠããããšã«æ³šæããŠãã ããããã®ãããã¯ã¯ãLispã§ãã§ã¯ãªããCommon Lispã§ãã ããæè»ãªã«ãŒã«ãåãã#lispcafeãã£ãã«ããããŸãã
ã²ãŒã éçºè
ã®ã³ââãã¥ããã£ã¯éåžžã«æŽ»çºã§ãããç§ã¯ç¹ã«ããã«ç²ŸéããŠããŸããã GoogleããæäŒãããŸãã
äžè¬çãªLispãããã§ãã·ã§ãã«ã¯ããããªã¹ãã§ã³ãã¥ãã±ãŒã·ã§ã³ããšããŸãã Lispã®ä»ã®æ¹èšã®è°è«ã¯è©±é¡å€ã§ãããåå¿è
ããã®è³ªåã¯åãå
¥ããããŸããã
http://lists.common-lisp.net/mailman/listinfo/proèšèªããããã£
ãã¡ã€ã«ãã³ã³ãã€ã«ããæ¹æ³ã¯ïŒ
ç°¡åãªçãïŒ Lispãèµ·åããŠæ¬¡ãå
¥åïŒ
(compile-file "/path/to/myfile.lisp")
次ã«ãã»ãšãã©ã®å Žåãã³ã³ãã€ã«ããããã¡ã€ã«ãããŒãïŒããŒã...ïŒããå¿
èŠããããŸãã
å±éãããçãïŒã»ãšãã©ã®ã³ã³ãã€ã«æžã¿èšèªã¯é察話åã§ã-ã³ãã³ãã©ã€ã³ãŸãã¯IDEãããã¡ã€ã«ãã³ã³ãã€ã«ããŠãããã³ã³ãã€ã«æžã¿ãã¡ã€ã«ãå®è¡ããŸãã Lispã§ã¯ãããã¯ããã§ã¯ãããŸããã
äžè¬ã«ããããžã§ã¯ããå®è¡å¯èœãã¡ã€ã«ã«å€æã§ããŸãããéåžžã®äœæ¥ã»ãã·ã§ã³ã¯ãäºæ³ã©ãããç·šé-ã³ã³ãã€ã«-å®è¡ãµã€ã¯ã«ãšã¯ç°ãªããŸãã
éåžžã察話ã¯ã察話çã«ã³ãŒããè¿œå ããäœæ¥ã»ãã·ã§ã³ãå«ãå®è¡äžã®Lispããã»ã¹ãšè¡ãããŸãã
äŸïŒ
- Emacsãéãã
Mx slime
䜿çšããŠSlimeãšLisp Mx slime
èµ·åããŸãã - ããšãã°ãASDFã䜿çšããŠãæ¢åã®ã³ãŒããããŒãããŸãã
- ç®çã®ãã¡ã€ã«ãéããé¢æ°ãç·šéããŠ
Cc Cc
ãæŒããšãåã³ã³ãã€ã«ãè¡ãããŸãã - Slime REPLã«è¡ããå€æŽããã¹ãããŸã;
- æé 3ããç¹°ãè¿ããŸãã
äžèšã®ç¥èªASDFã¯ãå¥ã®ã·ã¹ãã å®çŸ©æ©èœãã®ç¥ã§ãã ãã®ã·ã¹ãã ã§ã¯ãåäžã®ã³ãã³ãã§ããŠã³ããŒããŸãã¯ã³ã³ãã€ã«ããããã«ãè€æ°ã®ãã¡ã€ã«ãåäžã®ã·ã¹ãã ã«åéããæ¹æ³ãæå®ã§ããŸãã ã¡ã€ã¯ã®ãããªãã®ã
å®è¡å¯èœãã¡ã€ã«ãäœæããæ¹æ³ã¯ïŒ
çãã¯ã䜿çšããŠããå®è£
ã«ãã£ãŠç°ãªããŸãã ããã¥ã¡ã³ããåç
§ããŠãã ããã SBCLã«ã€ããŠè©±ãå ŽåïŒ
æ©èœãšé©çš-éãã¯äœã§ãããäœã䜿çšããŸããïŒ
ç°¡åãªçãïŒ FUNCALL
ã䜿çšã§ããå Žåã¯ã©ãã§ããä»ã®å Žåã¯
APPLY
䜿çšããŸãã
詳现ãªåçïŒ
FUNCALL
åŒã³åºã
FUNCALL
åŒæ°
FUNCALL
æ°ãããã£ãŠããå¿
èŠããããŸãã
APPLY
ïŒããã³
MULTIPLE-VALUE-CALL
ïŒã¯ãåŒæ°ã®æ°ã«é¢ããæ
å ±ãå¿
èŠãšããŸããã
(defun map-list-with-1 (function list arg) (mapcar (lambda (elt) (funcall function elt arg)) list)) (defun map-list-with-n (function list &rest args) (mapcar (lambda (elt) (apply function elt args)) list))
APPLY
ã䜿çšããŠ
MAP-LIST-WITH-1
ãèšè¿°ããå¿
èŠã¯ãããŸãã
FUNCALL
åŒã³åºã
FUNCALL
ã»ãŒç¢ºå®ã«å¹ççã§ãã
察ç
§çã«ã
MAP-LIST-WITH-N
ã¯ãåŒã³åºãå
ãžã®åŒæ°ã®æ°ãäžæã§ããããã
FUNCALL
ã䜿çšããŠèšè¿°ã§ããŸããã
APPLY
䜿çšããå¿
èŠããããŸãã
SETãSETQãSETF-éãã¯äœã§ãããäœã䜿çšããŸããïŒ
ç°¡åãªçãïŒåžžã«
SETF
ã䜿çšã
SETF
ã
詳现ãªåçïŒæã
ãCommon LispããŸã ååšããŠããªãã£ããšããåå¥å€æ°ã¯ãªããåçå€æ°ã®ã¿ããããŸããã ãããŠã
SETQ
ã
SETF
ã
SETF
ã
SET
ã ãããããŸããã
ä»æ¥æžãããŠããããš
(setf (symbol-value '*foo*) 42)
ãã®ããã«èšé²ããã
(set (quote *foo*) 42)
æçµçã«
SETQ
ïŒSET QuotedïŒã«æžå°ã
SETQ
(setq *foo* 42)
ãã®åŸãåå¥å€æ°ãåºçŸãã
SETQ
ã䜿çšããŠããããå²ãåœãŠãããã«ãªã£ãããã
SETQ
ã¯
SET
åãªãã©ãããŒã§ã¯ãªããªããŸããã
åŸã«ã誰ããããŒã¿æ§é ã«å€ãå²ãåœãŠãä»ã®èšèªã®Lå€ããã©ãŒãªã³ã°ããäžè¬çãªæ¹æ³ãšããŠ
SETF
ïŒSETãã£ãŒã«ãïŒãçºæã
SETF
ïŒ
x.car := 42;
ãšããŠæžãããŠããŸã
(setf (car x) 42)
察称æ§ãšäžè¬æ§ã®ããã«ã
SETF
ã«ã¯
SETQ
æ©èœãå«ãŸããŠ
SETQ
ãŸãã
SETQ
ã¯äœã¬ãã«ã®ããªããã£ãã§ããã
SETF
ã¯é«ã¬ãã«ã®æäœã§ãããš
SETF
ãŸãã
ãã®åŸãã·ã³ããªãã¯ãã¯ããç»å ŽããŸããã ã·ã³ããªãã¯ãã¯ãã¯ééçã§ãããããå²ãåœãŠããããå€æ°ããå®éã«ã·ã³ããªãã¯ãã¯ãã§ããå Žåã«
SETF
ã
SETQ
ããã«åäœããããã«
SETF
ããŸããã
(defvar *hidden* (cons 42 42)) (define-symbol-macro foo (car *hidden*)) foo => 42 (setq foo 13) foo => 13 *hidden* => (13 . 42)
ãããŠä»ãç§ãã¡ã¯æè¿èªåèªèº«ãèŠã€ããŸãïŒ
SET
ãš
SETQ
ã¯æ¬è³ªçã«
SETQ
ãããå€ãæ¹èšããæ®ãããŠãããããããã次ã®Common Lispããè±åŽãããã§ãããã
åžžã«
SETF
䜿çšã
SETF
ã
'ïŒ1 2 3ïŒãŸãã¯ïŒlist 1 2 3ïŒïŒ
çãçãïŒæžã
(list 1 2 3)
éããããããŸã§ã æžããªã
'(1 2 3)
ç Žå£çã«å€æŽããªãã§ãã ããïŒã€ãŸãã
SORT
ãŸãã¯
NREVERSE
ã䜿çšããŠïŒã
å±éãããçãïŒæåã«ãäžéåŒçšç¬Šã¯å€æãããã¯ãã§ã
'anything
ã§
(quote anything)
èªã¿ãªãã
'(1 2 3) === (quote (1 2 3))
第äºã«ã
QUOTE
ã¯åŒæ°ãèšç®ããã«è¿ãç¹å¥ãªæŒç®åã§ãã ã ãã
'(1 2 3)
ãªãã©ã«ãªã¹ããè¿ããŸãã ã»ãšãã©ã®èšèªãšåæ§ã«ããªãã©ã«ããŒã¿ãå€æŽãããšãæªå®çŸ©ã®çµæãçããŸãã ããšãã°ãã³ã³ãã€ã©ã¯ãªãã©ã«ãå«ãå®æ°ãé£çµã§ããŸãã
(let ((a '(1 2 3)) (b '(1 2 3))) (eq ab))
ãã®çµæãAãå€æŽãããšBãå€æŽã§ãããšããäºå®ããããŸããããªã
QUOTE
é©ããŠããã®ã§ããããã ããšãã°ãã³ã³ãã€ã©ãçµåã§ããäžå€ã®å€§ããªãªã¹ããããå Žåããããããªãã©ã«ãšããŠããŒã¯ãããšãã³ã³ãã€ã©ã«çµåããæš©å©ãäžããããŸãã
* EARS *ãšã¯äœã§ããïŒ
å€æ°ã®å®£èšã«äœ¿çšãããã®ã
DEFVAR
ãŸãã¯
DEFPARAMETER
ãåžžã«* SUCH NAME *ãå®è¡ããŸãã ãŸããããŒã«ã«å€æ°ã«ã¯ãããè¡ããªãã§ãã ããã
(defvar *-* ...) (defvar -- ...)
ãªãã§ïŒ ããã§ãç¹å¥ãªå€æ°ãäœãåãããªãå Žåã¯ãèªãã§ããæ¬ãèªã¿ç¶ããçµäºãããæ»ã£ãŠãã ããããã ããä»ã¯è³ã䜿ã£ãŠãã ããã
è³ã¯ãéåžžã«ç°¡åãª2ã€ã®åçŽãªééãããä¿è·ããŸãã
ãšã©ãŒ1ïŒç¹æ®å€æ°ã®ã©ã³ãã ãã€ã³ãã£ã³ã°ã
(defparameter foo "foo!") (defun say-it () (write-line foo)) (defun say-more (foo) (say-it) (format t "now say ~A~%" foo))
ããŸ
(say-more "bar!")
å°å·ããŸã
say bar! now say bar!
æåŸ
ã®ä»£ããã«
say foo! now say bar!
...ãã£ãšïŒ
ãšã©ãŒ2ïŒã¿ã€ããã¹ã®ãããèªã¿åãã¯ããŒã«ã«å€æ°ã§ã¯ãªãç¹å¥ãªãã®ããè¡ãããèŠåã¯çºè¡ãããŸããã
éåžžãã³ã³ãã€ã«æã®èŠåãšã©ã³ã¿ã€ã ãšã©ãŒã衚瀺ãããŸãã
(defun foo (bar) bat)
ãããããã®åã«æžãå Žå
(defparameter bat "baseball")
ãšã©ãŒã¯çºçããããããã°ã«å€ãã®æéãè²»ãããäœãééã£ãŠããã®ããç解ããããšããŸãã
èªåã§ã³ãŒããäœæããå Žåãè³ã眮ããã©ããã¯ãŸã£ããåãã§ãããã³ãŒããå
¬éãããšãã*è³*ããªãããšã¯ä»ã®äººã«ãšã£ãŠæéã®ç¡é§ãæå³ããŸãã ããããªãã§ãã ããïŒ
è³ã®æ¬ åŠã¯ããšã©ãŒã®æèŠãäœæããŸãïŒç§ãèŠããšã
(defparameter - ...)
äžèŠãããšå®å
šã«ç¡å®³ã«èŠããã³ãŒããéããŒã«ã«ãªå¯äœçšãäŸåæ§ãæããªããšããä¿èšŒã¯ãªããããã³ãŒããç¹ã«æ³šææ·±ãèªãå¿
èŠãããããšãç解ããŠããŸãã
åžžã«*è³*ã眮ããŸãã 圌ãã¯ãã¹ãŠã®ã«ãŒã«ã«äŸå€ããããšèšããŸããããã®å Žåããã®ã«ãŒã«ã®æ¬åœã®äŸå€ãèŠã€ããããšã¯éåžžã«å°é£ã§ãã
è¯ãã³ãŒã
-ãã³ããã¹