Lisp

 

Lisp Àº 1958 ³â¿¡ John McCarthy °¡ ¹ß¸íÇÑ ÇÔ¼öÇü (functional) ÇÁ·Î±×·¥¾ð¾î ÀÌ´Ù (C ¾ð¾î´Â 1972³â¿¡ ¹ß¸íµÇ¾ú´Ù)°è»ê (Computation) ÀÇ ½ÇÁ¦ÀûÀÎ ¸ðµ¨ (Alan Turing ÀÇ °Í°ú ºñ±³Çؼ­) ·Î¼­´Â ÃÖÃÊ·Î °³¹ßµÈ °ÍÀ¸·Î¼­, ³ªÁß¿¡´Â 1970 ¿¬´ë¿Í 1980 ¿¬´ë¿¡ ÀΰøÁö´É (Artificial Intelligence) ÀÇ Àü¼º±âµ¿¾È¿¡ ÇÁ·Î±×·¡¸Ó°¡ °¡Àå ¼±È£ÇÏ´Â ¾ð¾î°¡ µÇ¾ú´Ù. Lisp Àº ¿À´Ã³¯ À¥ °³¹ß¿¡¼­ºÎÅÍ ±ÝÀ¶ºÐ¾ß±îÁö ¸¹Àº ºÐ¾ß¿¡¼­ »ç¿ëµÇ¸ç, ÄÄÇ»ÅÍ°úÇÐ ±³À°¿¡´Â ÈçÈ÷ »ç¿ëµÈ´Ù.

lab   paper   site   Prolog

Lisp À̶õ ¸íĪÀº "List Processing"¿¡¼­ ¿Â °ÍÀÌ´Ù. ¿¬°á¸®½ºÆ® (Linked list) ´Â Lisp ÀÇ ÁÖ¿äÇÑ ÀڷᱸÁ¶ÁßÀÇ ÇϳªÀ̸ç, ¶È°°Àº ±âº»ÀûÀÎ ¸®½ºÆ® µ¿ÀÛÀÌ ¸ðµç Lisp ¹æ¾ðµé (dialects)¿¡¼­ ÀÛµ¿ÇÑ´Ù. Lisp ¹æ¾ðµé¿¡¼­ ¶Ç´Ù¸¥ °øÅëÁ¡Àº dynamic typing (½ÇÇà½Ã ÀÚ·áÇü üũ) À» Æ÷ÇÔÇÏ°í, functional programming À» Áö¿øÇϸç, source code ¸¦ µ¥ÀÌÅͷμ­ Á¶ÀÛ°¡´ÉÇÏ´Ù´Â °Í µîÀÌ´Ù.

Lisp Àº ¶ÇÇÑ Áï½Ã Àνİ¡´ÉÇÑ Çü½Ä (instantly-recognizable appearance) ¸¦ °¡Áø´Ù. ÇÁ·Î±×·¥ ÄÚµå´Â ¸®½ºÆ® (lists, Ç¥) ¿Í °°Àº ¹®¹ý (°ýÈ£¾È¿¡ ³ÖÀº S-expression ¹®¹ý) À» »ç¿ëÇÏ¿© ÀÛ¼ºµÈ´Ù. ÇÁ·Î±×·¥ (¶Ç´Â ÀڷᱸÁ¶) ¿¡ ÀÖ´Â ¸ðµç sub-expression Àº °ýÈ£¿Í ÇÔ²² ½ÃÀÛÇÑ´Ù. ÀÌ°Í ¶§¹®¿¡  Lisp Àº parse ÇϱⰡ ½¬¿ì¸ç, metaprogramming (´Ù¸¥ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µå´Â°Í) ÇÏ´Â °ÍÀ» °£´ÜÇÏ°Ô ¸¸µç´Ù. ÀÌ°ÍÀÌ 70, 80 ¿¬´ë¿¡ Ä¿´Ù¶õ Àα⸦ ¾òÀº ÁÖ¿äÇÑ ÀÌÀ¯À̸ç, AI ÇÁ·Î±×·¡¸ÓµéÀº Lisp ÀÌ ÀÚ¿¬½º·´°Ô ½º½º·Î ÀüÆÄÇÏ´Â (self-propagating) ÇÁ·Î±×·¥¿¡ ÀûÇÕÇÏ´Ù°í ¹Ï¾ú´ø °ÍÀÌ´Ù.

1958 ³â¿¡ ź»ýÇÑ Lisp Àº ¿À´Ã³¯±îÁöµµ »ç¿ëµÇ´Â µÎ ¹ø°·Î ¿À·¡µÈ high-level ÇÁ·Î±×·¥¾ð¾îÀÌ´Ù : Fortran ¸¸ÀÌ ´õ¿À·¡µÇ¾úÀ» »ÓÀÌ´Ù. Fortran ó·³ Lisp µµ ¾öû³­ º¯È­¸¦ °Þ¾úÀ¸¸ç, ¼ö¸¹Àº ¹æ¾ðµéÀÌ Á¸ÀçÇØ¿Ô´Ù. ¿À´Ã³¯ ¹ü¿ë ÇÁ·Î±×·¡¹Ö¿¡ °¡Àå ³Î¸® ¾Ë·ÁÁø Lisp ¹æ¾ðÀº Common Lisp °ú Scheme ÀÌ´Ù.

Lisp ÀÇ ¿ª»ç

Information Processing Language ´Â 1955~1956 ¿¡ ¸¸µé¾îÁø ÃÖÃÊÀÇ AI ¾ð¾îÀ̸ç, Lisp¿¡¼­ »ç¿ëµÈ list-processing °ú recursion °°Àº °³³äµéÀ» ÀÌ¹Ì Æ÷ÇÔÇÏ°í ÀÖ¾ú´Ù.

Lisp Àº 1958 ³â¿¡ John McCarthy °¡ MIT ¿¡ ÀÖÀ» ¶§ ¹ß¸íÇß´Ù. ±×´Â "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I". (Part II ´Â ¹ßÇ¥µÇÁö ¾Ê¾Ò´Ù) ¶ó´Â ³í¹®¿¡¼­ ¼³°èÇÏ¿© 1960 ³â¿¡ Communications of the ACM ¿¡ ¹ßÇ¥Çß´Ù. ±×´Â °£´ÜÇÑ operator µé°ú ÇÔ¼ö¸¦ À§ÇÑ Ç¥±âµé·Î½á (a couple of simple operators and a notation for functions) Àüü ÇÁ·Î±×·¥ ¾ð¾î¸¦ ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀ» º¸¿©ÁÖ¾ú´Ù.

McCarthy ÀÇ ¿ø·¡ÀÇ Ç¥±â´Â ¹Ù±ùÂÊÀ¸·Î [] °ýÈ£ (bracket) ¸¦ »ç¿ëÇÏ´Â "M-expressions" (M Àº meta) À» »ç¿ëÇß´Ù. ÀÌ°ÍÀº °ð Æó±âµÇ°í ±×°¡ ¿ø·¡´Â ³»ºÎÇ¥ÇöÀ¸·Î Á¦¾ÈÇÏ¿´´ø () °ýÈ£ (parenthesis)¸¦ »ç¿ëÇÏ´Â "S-expressions" (S ´Â symbol) À» ¼±È£ÇÏ°Ô µÇ¾ú´Ù. ¿¹¸¦µé¸é M-expression ¿¡¼­ÀÇ car[cons[A,B]] Àº S-expression ¿¡¼­ÀÇ (car (cons A B)) °ú °°´Ù. 

Lisp Àº ¿ø·¡ IBM 704 ÄÄÇ»ÅÍ¿¡¼­ Steve Russell ¿¡ ÀÇÇØ ±¸ÇöµÇ¾î, µÎ °³ÀÇ ¸í·É¾î car (Contents of Address Register) ¿Í cdr (Contents of Decrement Register) ¸¦ ¸®½ºÆ®¸¦ ºÐ¼®ÇϱâÀ§ÇÑ ±âº»µ¿ÀÛÀ¸·Î »ç¿ëÇÏ¿´´Ù. ´ëºÎºÐÀÇ Lisp ÀÇ ¹æ¾ð¿¡¼­µµ, ÇϳªÀÇ ¸®½ºÆ®¿¡¼­ÀÇ Ã³À½ item °ú ±× ¸®½ºÆ®ÀÇ ³ª¸ÓÁö¸¦ °¢°¢ ¸®ÅÏÇÏ´Â µ¿ÀÛÀ¸·Î¼­ ¿©ÀüÈ÷ car °ú cdr ¸¦ »ç¿ëÇÑ´Ù.

Lisp À¸·Î ÀÛ¼ºµÈ ÃÖÃÊÀÇ ¿ÏÀüÇÑ Lisp ÄÄÆÄÀÏ·¯´Â 1962 ³â¿¡ Tim Hart ¿Í Mike Levin ÀÌ ±¸ÇöÇÏ¿´´Ù (Hart ¿Í Levin ÀÇ ¸Þ¸ð). ÀÌ ÄÄÆÄÀÏ·¯´Â incremental compilation ÀÇ Lisp ¸ðµ¨À» ¼±º¸¿´´Âµ¥, ±×°ÍÀº compiled ¿Í interpreted functions ¸¦ ÀÚÀ¯·Ó°Ô ¼¯¾î¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Hart ¿Í Levin ÀÇ ¸Þ¸ð¿¡¼­ »ç¿ëµÈ ¾ð¾î´Â McCarthy ÀÇ Ãʱâ ÄÚµå º¸´Ù´Â Çö´ëÀûÀÎ Lisp ½ºÅ¸ÀÏ¿¡ ÈξÀ ´õ °¡±î¿î °ÍÀÌ´Ù.

±× ÀÌÈÄ¿¡ Lisp Àº AI ¿¬±¸¿Í ¹ÐÁ¢ÇÏ°Ô ¿¬°áµÇ¾ú´Ù. 1970 ¿¬´ë¿¡ AI ¿¬±¸´Â »ó¾÷ÀûÀÎ ºÎ»ê¹° (offshoots) µéÀ» ³º¾Ò°í, ±âÁ¸ Lisp ½Ã½ºÅÛÀÇ ¼º´ÉÀº ´õ ÁÖ¸ñÀ» ¹Þ°Ô µÇ¾ú´Ù. ÀϺΠgarbage collection ¹®Á¦¿Í ÀϺΠ³»ºÎ±¸Á¶ÀÇ Ç¥Çö ¹®Á¦ ¶§¹®¿¡, Lisp Àº ±×´ç½ÃÀÇ ¸Þ¸ð¸®°¡ Á¦ÇÑµÈ Çϵå¿þ¾î »ó¿¡¼­ÀÇ ½ÇÇàÀÌ ¾î·Æ°Ô µÇ¾ú´Ù. ±×·ÎÀÎÇØ Lisp ȯ°æ°ú ÇÁ·Î±×·¥À» ½ÇÇàÇϱâÀ§ÇÑ Çϵå¿þ¾îÀÎ Lisp machineÀ» ¸¸µé¾î »ç¿ëÇÏ°Ô µÇ¾ú´Ù. Çö´ëÀÇ ÄÄÆÄÀÏ·¯ Á¦Á¶±â¼ú°ú ´õºÒ¾î, ¿À´Ã³¯ÀÇ °Å´ëÇÑ ÄÄÇ»ÅÍ ¿ë·®Àº (1970 ¿¬´ë°ú ºñ±³ÇÏ¿©) ±×·¯ÇÑ Àü¹®ÀûÀÎ Çϵå¿þ¾î°¡ ºÒÇÊ¿äÇÏ°Ô µÇ¾ú°í Áö±ÝÀº ¾ÆÁÖ È¿À²ÀûÀÎ Lisp ȯ°æÀÌ Á¸ÀçÇÑ´Ù.

1980 ¿¬´ë¿Í 1990 ¿¬´ë¿¡ ¼ö¸¹Àº Lisp ¹æ¾ðµéÀ» ´Ü ÇϳªÀÇ ¾ð¾î·Î ÅëÀÏÇÏ·Á´Â Å« ³ë·ÂÀÌ ÀÖ¾ú´Ù. ±× »õ·Î¿î ¾ð¾î°¡ Common Lisp À¸·Î¼­ ±âº»ÀûÀ¸·Î ¼ö¸¹Àº ¹æ¾ðµéÀÇ superset À̾ú´Ù. 1994 ³â¿¡ ANSI ´Â Common Lisp Ç¥ÁØ "ANSI X3.226-1994 Information Technology Programming Language Common Lisp."¸¦ ¹ßÇ¥Çß´Ù. À̶§¿¡´Â Lisp ÀÇ ¼¼°è½ÃÀåÀº ±× Àü¼º±â¿¡ ºñÇؼ­´Â ÈξÀ ´õ ÀÛ¾ÆÁ³´Ù. Lisp Àº ¿©ÀüÈ÷ »ç¿ëµÇ´Â °¡Àå ¿À·£ ¾ð¾î ÁßÀÇ ÇϳªÀ̸ç Algol, Fortran, Cobol µéÀÌ ºñ½ÁÇÑ Ã³ÁöÀÌÁö¸¸ Fortran °ú Cobol Àº ¿©ÀüÈ÷ »ç¿ëµÇ°í ÀÖ´Ù.

Áö±ÝÀº ¾îµð¿¡³ª Á¸ÀçÇÏ´Â if-then-else ±¸Á¶´Â, Áö±ÝÀº ¾î¶² ÇÁ·Î±×·¥ ¾ð¾î¿¡³ª ±âº»ÀûÀÎ ¿ä¼Ò·Î¼­ Ãë±ÞµÇÁö¸¸, Lisp¿¡¼­ McCarthy °¡ ¹ß¸íÇÏ¿© óÀ½ ¸ð½ÀÀ» µå·¯³½ °ÍÀÌ´Ù. ±×°ÍÀº Algol ¿¡¼­ °è½ÂÇÏ¿© ´ëÁßÈ­ µÇ¾ú´Ù. ...... (Wikipedia : Lisp programming language)

LispÀº Àç±Í ¹æÁ¤½ÄÀÇ »ç¿ëÀ» ÅëÇØ Ãß·ÐÀ» Çü½ÄÈ­ ÇϱâÀ§ÇÑ °ÍÀ¸·Î¼­ ....... ±× ¹ßÀü ¿ª»ç´Â ÄÄÇ»ÅÍ¿Í Àΰ£ ¾ð¾î »çÀÌÀÇ ½Éº¼ ó¸®ÀÇ ¹ßÀü°ú °ü·ÃµÇ¾î ÀÖ´Ù.  ÀÌÁúÀûÀÎ ¸®½ºÆ® µ¥ÀÌÅÍ Å¸ÀÔÀÌ ´Ù¾çÇÑ ¸ðµ¨À» È¿À²ÀûÀ¸·Î ó¸®Çϱâ À§ÇØ ¸¸µé¾î Á³´Ù ..... LispÀÇ ±âº» °³³äÀ» ¸¶½ºÅÍ Çϱâ´Â ½±´Ù. LispÀº ÀüÇô °¡¸£Ä¥ ÇÊ¿ä°¡ ¾ø´Â ¾ð¾î¶ó°íµµ ÇÑ´Ù. ±×·¯³ª LispÀ» ¸¶½ºÅÍÇϱâÀ§ÇÑ ´ëºÎºÐÀÇ °úÁ¤Àº ÇÁ·Î±×·¡¸Ó°¡ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ¸¹Àº ¼öÀÇ libraries of utilites ¸¦ ¹è¿ì´Â °úÁ¤ÀÌ´Ù.

video :

Lisp Tutorial - Learn Lisp in One video : Code, Book : Practical Common Lisp : Derek Banas, 2015/07/21

 

Structure & Interpretation of Computer Programs by scheme (2nd ed) : UC Berkeley : Brian Harvey, 2008/07/31 ... Playlist 41 ... ÄÄÇ»ÅÍ ÇÁ·Î±×·¥ÀÇ ±¸Á¶¿Í Çؼ® (2ÆÇ)

 

Structure & Interpretation of Computer Programs by scheme (1st ed) : MIT OCW : Harold Abelson, Gerald Jay Sussman, 1986/00/00 ... Playlist 20 ... ÄÄÇ»ÅÍ ÇÁ·Î±×·¥ÀÇ ±¸Á¶¿Í Çؼ® 1, 2 (ÃÊÆÇ)