ÇÁ·Î±×·¡¹ÖÀÌ ¹º°¡ µ¹¾Æº¸°Ô ÇØÁÖ´Â MITÀÇ ÄÄÇ»ÅÍ°úÇÐ ÀÔ¹®±³°ú¼
¸¶¹ý»ç Ã¥(Wizard Book)À̶ó´Â º°¸íÀ¸·Îµµ À¯¸íÇÑ ÀÌ Ã¥Àº µ¶Æ¯Çϱâ·Î ¼Ò¹®³, MIT ÄÄÇ»ÅÍ °úÇÐ ÀÔ¹® ±³°ú °úÁ¤¿¡¼ ¾²´Â ±³°ú¼·Î ÇÁ·Î±×·¡¹Ö ¾ð¾î ¹®¹ýÀÌ ¾Æ´Ñ ÇÁ·Î±×·¥ÀÇ »À´ë¸¦ ±¸¼ºÇÏ´Â ±â¼úÀ» ÀÍÈ÷°Ô ÇØÁØ´Ù.
ÈçÇÑ ÇÁ·Î±×·¡¹Ö ÀÔ¹®¼¿Í ´Þ¸®, ³ÇØÇÏ´Ù´Â ÆòÀ» µè´Â LISP¿¡¼ °¥¶óÁ® ³ª¿Â SchemeÀ» È°¿ëÇϸç, ¿ä¾à(abstraction)°ú Á¶¸³½Ä ¼³°è(modularity)¿¡ µû¶ó º¹ÀâÇÑ ÇÁ·Î±×·¥À» °£´ÜÇÏ°Ô Â¥´Â Àü·«À» º¸¿©ÁØ´Ù. ±× »Ó ¾Æ´Ï¶ó, »óÅÂ(state)°¡ ÀÖ´Â ¹°Ã¼, µ¤¾î¾²±â(assignment), º´Çà ÇÁ·Î±×·¡¹Ö µî ´Ù¾çÇÑ ÇÁ·Î±×·¡¹Ö À̽´¸¦ »ìÆ캸¸ç ÇÑ°ÉÀ½¾¿ ÇÁ·Î±×·¥À» ¼³°èÇÏ°í Â¥ ¸ÂÃß°í »ìÆ캸°í °íÃÄ ¾²¸é¼, °ú¿¬ ÇÁ·Î±×·¡¹ÖÀ̶õ ¹«¾ùÀΰ¡ µ¹ÀÌÄÑ º¸°Ô ÇÏ°í, »ý°¢ÇÏ´Â ¹æ½Ä°ú ±× »ý°¢À» Ç¥ÇöÇÏ´Â ¹æ½ÄÀ» °¡¸£ÃÄ ÁØ´Ù.
Ã¥¿¡ ´ã±ä ±³°ú °úÁ¤Àº ÇѶ§ ¼¼°è 300¿©°³ ´ëÇп¡¼ »ç¿ëµÇ¾úÀ¸¸ç, Áö±Ýµµ ±¹³»ÀÇ ¼¿ï´ë¿Í Ä«À̽ºÆ®¸¦ Æ÷ÇÔÇØ ¼¼°è 100¿©°³ À̸§³ ´ëÇп¡¼ °¡¸£Ä¡°í ÀÖ´Ù.
ÇÁ·Î±×·¡¹ÖÀÌ ¹º°¡ µ¹¾Æº¸°Ô ÇØÁÖ´Â
MITÀÇ ÄÄÇ»ÅÍ°úÇÐ ÀÔ¹®±³°ú¼ / ÇÁ·Î±×·¡¸Ó¸¦ ±â¸£´Â ¸¶¹ý¼(Wizard Book)
¸¶¹ý»ç Ã¥(Wizard Book)À̶ó´Â º°¸íÀ¸·Îµµ À¯¸íÇÑ ÀÌ Ã¥Àº µ¶Æ¯Çϱâ·Î ¼Ò¹®³, MIT ÄÄÇ»ÅÍ °úÇÐ ÀÔ¹® ±³°ú °úÁ¤¿¡¼ ¾²´Â ±³°ú¼·Î, ÇÁ·Î±×·¡¹Ö ¾ð¾î ¹®¹ýÀÌ ¾Æ´Ñ ÇÁ·Î±×·¥ÀÇ »À´ë¸¦ ±¸¼ºÇÏ´Â ±â¼úÀ» ÀÍÈ÷°Ô ÇØÁØ´Ù. ÈçÇÑ ÇÁ·Î±×·¡¹Ö ÀÔ¹®¼¿Í ´Þ¸®, ³ÇØÇÏ´Ù´Â ÆòÀ» µè´Â LISP¿¡¼ °¥¶óÁ® ³ª¿Â SchemeÀ» È°¿ëÇϸç, ¿ä¾à(abstraction)°ú Á¶¸³½Ä ¼³°è(modularity)¿¡ µû¶ó º¹ÀâÇÑ ÇÁ·Î±×·¥À» °£´ÜÇÏ°Ô Â¥´Â Àü·«À» º¸¿©ÁØ´Ù. ±× »Ó ¾Æ´Ï¶ó, »óÅÂ(state)°¡ ÀÖ´Â ¹°Ã¼, µ¤¾î¾²±â(assignment), º´Çà ÇÁ·Î±×·¡¹Ö, ÇÔ¼ö ÇÁ·Î±×·¡¹Ö, Á¦¶§ °è»ê¹ý(lazy evaluation), ºñ°áÁ¤Àû ÇÁ·Î±×·¡¹Ö(non_deterministic programming) µî ´Ù¾çÇÑ ÇÁ·Î±×·¡¹Ö À̽´¸¦ »ìÆ캸¸ç ÇÑ°ÉÀ½¾¿ ÇÁ·Î±×·¥À» ¼³°èÇÏ°í Â¥ ¸ÂÃß°í »ìÆ캸°í °íÃÄ ¾²¸é¼, "°ú¿¬ ÇÁ·Î±×·¡¹ÖÀ̶õ ¹«¾ùÀΰ¡" µ¹ÀÌÄÑ º¸°Ô ÇÏ°í, »ý°¢ÇÏ´Â ¹æ½Ä°ú ±× »ý°¢À» Ç¥ÇöÇÏ´Â ¹æ½ÄÀ» °¡¸£ÃÄ ÁØ´Ù.
ÀÌ Ã¥¿¡ ´ã±ä ±³°ú °úÁ¤Àº ÇѶ§ ¼¼°è 300¿©°³ ´ëÇп¡¼ »ç¿ëµÇ¾úÀ¸¸ç, Áö±Ýµµ ±¹³»ÀÇ ¼¿ï´ë¿Í Ä«À̽ºÆ®¸¦ Æ÷ÇÔÇØ ¼¼°è 100¿©°³ À̸§³ ´ëÇп¡¼ °¡¸£Ä¡°í ÀÖ´Ù. |
1. ÇÁ·Î½ÃÀú¸¦ ½á¼ ¿ä¾àÇÏ´Â ¹æ¹ý
1.1 ÇÁ·Î±×·¥ © ¶§ ¹ÙÅÁÀÌ µÇ´Â °Í
1.1.1 ½Ä
1.1.2 À̸§°ú ȯ°æ
1.1.3 ¿«Àº½Ä(combination)À» °è»êÇÏ´Â ¹æ¹ý
1.1.4 ¹À½ ÇÁ·Î½ÃÀú(compound procedure)
1.1.5 ¸Â¹Ù²Þ °è»ê¹ý(substitution model)À¸·Î ÇÁ·Î½ÃÀú¸¦ ½ÇÇàÇÏ´Â ¹æ¹ý
1.1.6 Á¶°Ç ½Ä°ú ¼ú¾î(predicate)
1.1.7 ¿¬½À : ´ºÆ° ¹ý(newton method)À¸·Î Á¦°ö±Ù ã±â
1.1.8 ºí·¢¹Ú½ºÃ³·³ °£Ã߸° ÇÁ·Î½ÃÀú
1.2 ÇÁ·Î½ÃÀú¿Í ÇÁ·Î¼¼½º
1.2.1 µÇµ¹°Å³ª(recursion) ¹Ýº¹ÇÏ´Â(iteration) ÇÁ·Î¼¼½º
1.2.2 ¿©·¯ °¥·¡·Î µÇµµ´Â ÇÁ·Î¼¼½º
1.2.3 ÇÁ·Î¼¼½º°¡ Àڶ󳪴 Á¤µµ
1.2.4 °ÅµìÁ¦°ö
1.2.5 ÃÖ´ë °ø¾à¼ö
1.2.6 ¿¬½À : ¼Ò¼ö ã±â
1.3 Â÷¼ö ³ôÀº ÇÁ·Î½ÃÀú(higher_order procedure)·Î ¿ä¾àÇÏ´Â ¹æ¹ý
1.3.1 ÇÁ·Î½ÃÀú¸¦ ÀÎÀÚ·Î ¹Þ´Â ÇÁ·Î½ÃÀú
1.3.2 lambda·Î ³ªÅ¸³»´Â ÇÁ·Î½ÃÀú
1.3.3 ÀϹÝÀûÀÎ ¹æ¹ýÀ» Ç¥ÇöÇÏ´Â ÇÁ·Î½ÃÀú
1.3.4 ÇÁ·Î½ÃÀú¸¦ ¸¸µå´Â ÇÁ·Î½ÃÀú
2. µ¥ÀÌÅ͸¦ ¿ä¾àÇؼ Ç¥Çö·ÂÀ» ²ø¾î¿Ã¸®´Â ¹æ¹ý
2.1 µ¥ÀÌÅÍ ¿ä¾àµ¥ÀÌÅÍ °£Ã߸®±â, µ¥ÀÌÅÍ ³»¿ë °¨Ãß±â
2.1.1 ¿¬½À : À¯¸®¼ö¸¦ À§ÇÑ »ê¼ú ¿¬»ê
2.1.2 ¿ä¾àÀÇ °æ°è(abstraction barrier)
2.1.3 µ¥ÀÌÅͶõ ¹«¾ùÀΰ¡?
2.1.4 ÁýÁß °úÁ¦ : ±¸°£ »ê¼ú ¿¬»ê ¸¸µé±â
2.2 °èÃþ ±¸Á¶ µ¥ÀÌÅÍ¿Í ´ÝÈû ¼ºÁú
2.2.1 Â÷·Ê¿ÀÇ Ç¥Çö ¹æ¹ý
2.2.2 °èÃþ ±¸Á¶
2.2.3 °øÅë ÀÎÅÍÆäÀ̽º·Î½á Â÷·Ê¿ÀÇ ¾²ÀÓ»õ
2.2.4 ¿¬½À : ±×¸² ¾ð¾î
2.3 ±ÛÀÚ±âÈ£ µ¥ÀÌÅÍ
2.3.1 µû¿ÈÇ¥ ¿¬»ê
2.3.2 ¿¬½À : ±ÛÀÚ ½ÄÀÇ ¹ÌºÐ(symbolic differentiation)
2.3.3 ¿¬½À : ÁýÇÕÀ» ³ªÅ¸³»´Â ¹æ¹ý
2.3.4 ¿¬½À : ÇãÇÁ¸¸ ÀÎÄÚµù ³ª¹«
2.4 ¿ä¾àµÈ µ¥ÀÌÅÍÀÇ Ç¥Çö ¹æ½ÄÀÌ ¿©·¯ °¡ÁöÀÏ ¶§
2.4.1 º¹¼Ò¼ö Ç¥Çö
2.4.2 ŸÀÔÀ» Ç¥½ÃÇÑ µ¥ÀÌÅÍ
2.4.3 µ¥ÀÌÅÍ Á᫐ ÇÁ·Î±×·¡¹Ö°ú µ¡ºÙÀÓ ¼ºÁú
2.5 ÀϹÝÈµÈ ¿¬»ê ½Ã½ºÅÛ
2.5.1 ÀϹÝÈµÈ »ê¼ú ¿¬»ê
2.5.2 ŸÀÔÀÌ ´Ù¸¥ µ¥ÀÌÅ͸¦ ¿«¾î ¾²´Â ¹æ¹ý
2.5.3 ¿¬½À : ±âÈ£ ½Ä ´ë¼ö
3. ¸ðµâ, ¹°Ã¼, »óÅÂ
3.1 µ¤¾î¾²±â¿Í °¤Èù »óÅÂ(local state)
3.1.1 °¤Èù »óź¯¼ö(local state variable)
3.1.2 µ¤¾î¾²±â°¡ ÀÖ¾î¼ ÁÁÀº Á¡
3.1.3 µ¤¾î¾²±â¸¦ ²ø¾îµéÀÎ ´ë°¡
3.2 ȯ°æ °è»ê¹ý
3.2.1 °è»ê ±ÔÄ¢
3.2.2 °£´ÜÇÑ ÇÁ·Î½ÃÀú °è»êÇϱâ
3.2.3 ¹°Ã¼¿¡ »óŸ¦ ³Ö¾îµÎ´Â °÷, º¯¼ö À϶÷Ç¥
3.2.4 ¾ÈÂÊ Á¤ÀÇ
3.3 º¯Çü °¡´ÉÇÑ µ¥ÀÌÅÍ·Î ÇÁ·Î±×·¡¹ÖÇϱâ
3.3.1 º¯Çü °¡´ÉÇÑ ¸®½ºÆ®
3.3.2 ť
3.3.3 ǥ
3.3.4 µðÁöÅРȸ·Î ½Ã¹Ä·¹ÀÌÅÍ
3.3.5 °ü°è ¾Ë¸®±â(constraint propagation)
3.4 º´Ç༺ܽú¼àõ : ½Ã°£Àº Áß¿äÇÏ´Ù
3.4.1 º´Çà ½Ã½ºÅÛ¿¡¼ ½Ã°£ÀÇ ¼ºÁúº»Áú
3.4.2 º´Ç༺À» ´Ù½º¸®´Â ¹æ¹ý
3.5 ½ºÆ®¸²
3.5.1 ½ºÆ®¸²°ú (°è»êÀ») ¹Ì·é ¸®½ºÆ®
3.5.2 ¹«ÇÑ ½ºÆ®¸²(infinite stream)
3.5.3 ½ºÆ®¸² Æз¯´ÙÀÓ
3.5.4 ½ºÆ®¸²°ú ¼À¹Ì·ë °è»ê¹ý
3.5.5 ¸ðµâ·Î ¹Ù¶óº» ÇÔ¼ö¿Í ¹°Ã¼
4. ¾ð¾î¸¦ ó¸®ÇÏ´Â ±â¹ý
4.1 ¸ÞŸ½áŧ·¯ ½ÇÇà±â
4.1.1 ¾ð¾î ½ÇÇà±âÀÇ ¾ËÂ¥¹è±â
4.1.2 ½ÄÀ» ³ªÅ¸³»´Â ¹æ¹ý
4.1.3 ¾ð¾î ½ÇÇà±â¿¡¼ ¾²´Â µ¥ÀÌÅÍ ±¸Á¶
4.1.4 ¾ð¾î ½ÇÇà±â¸¦ º¸Åë ÇÁ·Î±×·¥Ã³·³ µ¹·Áº¸±â
4.1.5 ÇÁ·Î±×·¥µµ µ¥ÀÌÅÍó·³
4.1.6 ¾ÈÂÊ Á¤ÀÇ(internal definition)
4.1.7 ¹®¹ý ºÐ¼®°ú ½ÇÇà °úÁ¤À» ¶¼¾î³õ±â
4.2 Scheme ¹Ù²ãº¸±â _ Á¦¶§ °è»ê¹ý
4.2.1 ½ÄÀÇ °ªÀ» ±¸ÇÏ´Â Â÷·Ê _ Á¤ÀÇ´ë·Î °è»ê¹ý°ú ÀÎÀÚ ¸ÕÀú °è»ê¹ý
4.2.2 Á¦¶§ °è»ê¹ýÀ» µû¸£´Â ½ÇÇà±â
4.2.3 Á¦¶§¼À ¸®½ºÆ®¿Í ½ºÆ®¸²
4.3 Scheme ¹Ù²ãº¸±â _ ºñ°áÁ¤Àû °è»ê
4.3.1 amb¿Í ã±â
4.3.2 ºñ°áÁ¤Àû ÇÁ·Î±×·¥ Â¥±â
4.3.3 amb ½ÇÇà±â ±¸Çö
4.4 ³í¸®·Î ÇÁ·Î±×·¥ Â¥±â
4.4.1 ¿¬¿ª½Ä Á¤º¸ ã±â
4.4.2 Äõ¸® ½Ã½ºÅÛÀÇ µ¿ÀÛ ¹æ½Ä
4.4.3 ³í¸® ÇÁ·Î±×·¡¹ÖÀº ¼öÇÐ ³í¸®¸¦ µû¸£´Â°¡?
4.4.4 Äõ¸® ½Ã½ºÅÛ ¸¸µé±â
4.4.4.1 µå¶óÀ̹ö ·çÇÁ¿Í Äõ¸® °ª Âï¾î³»±â(instantiation)
4.4.4.2 ½ÇÇà±â(evaluator)
4.4.4.3 ÆÐÅÏ ¸ÅĪÀ¸·Î Âü¸» ã¾Æ³»±â
4.4.4.4 ±ÔÄ¢°ú µ¿ÀÏÈ
4.4.4.5 µ¥ÀÌÅͺ£À̽ºÀÇ °ü¸®
4.4.4.6 ½ºÆ®¸² ¿¬»ê
4.4.4.7 Äõ¸®ÀÇ ¹®¹ýÀ» ó¸®ÇÏ´Â ÇÁ·Î½ÃÀú
4.4.4.8 À϶÷Ç¥¿Í Á¤ÀÇ
5. ·¹Áö½ºÅÍ ±â°è·Î °è»êÇϱâ
5.1 ·¹Áö½ºÅÍ ±â°è ¼³°èÇϱâ
5.1.1 ·¹Áö½ºÅÍ ±â°è¸¦ ¹¦»çÇÏ´Â ¾ð¾î
5.1.2 ±â°è µðÀÚÀο¡¼ÀÇ ¼Ó ³»¿ë °¨Ãß±â(abstraction)
5.1.3 ¼ºê·çƾ
5.1.4 ½ºÅÃ(stack)À» ÀÌ¿ëÇØ µÇµ¹±â(recursion) ±¸ÇöÇϱâ
5.1.5 ¸í·É¾î Á¤¸®
5.2 ·¹Áö½ºÅÍ ±â°è ½Ã¹Ä·¹ÀÌÅÍ
5.2.1 ±â°è ¸ðÇü
5.2.2 ¾î¼Àºí·¯
5.2.3 ¸í·É¿¡ ÇØ´çÇÏ´Â ½ÇÇà ÇÁ·Î½ÃÀú ¸¸µé±â
5.2.4 ±â°è ¼º´É ÁöÄѺ¸±â
5.3 ¸Þ¸ð¸® ÇÒ´ç(memory allocation)°ú ÀçÈ°¿ë(garbage collection)
5.3.1 º¤ÅÍ·Î ³ªÅ¸³½ ¸Þ¸ð¸®
5.3.2 ¹«ÇÑÈ÷ ¸¹Àº ¸Þ¸ð¸®ÀÎ ¾ç º¸À̱â
5.4 Á¦¾î°¡ ´Ù º¸ÀÌ´Â ½ÇÇà±â
5.4.1 Á¦¾î°¡ ´Ù º¸ÀÌ´Â ½ÇÇà±âÀÇ ÇٽɺÎ
5.4.2 ½ÃÄö½º °è»ê°ú ²¿¸® µÇµ¹±â(tail recursion)
5.4.3 Á¶°Ç ½Ä, µ¤¾î¾²±â(assignment), Á¤ÀÇ
5.4.4 ½ÇÇà±â µ¹¸®±â
5.5 ¹ø¿ª(compilation)
5.5.1 ¹ø¿ª±âÀÇ ±¸Á¶
5.5.2 ÇÁ·Î±×·¥ ½ÄÀÇ ¹ø¿ª
5.5.3 Á¶ÇÕ ½Ä ¹ø¿ªÇϱâ
5.5.4 ¸í·ÉÁÙ Çѵ¥ ÇÕÄ¡±â
5.5.5 ¹ø¿ªµÈ ÄÚµåÀÇ ¿¹
5.5.6 ÅؽºÆ®¿¡¼ º¯¼öÀÇ Á¤ÀǸ¦ ÆľÇÇϱâ(lexical addressing)
5.5.7 ¹ø¿ªµÈ Äڵ带 ½ÇÇà±â¿¡ ¿¬°áÇϱâ
¿ë¾î ´ë¿ªÇ¥
¿¬½À¹®Á¦ ¸ñÂ÷
Âü°í¹®Çå
ã¾Æº¸±â |