[[TableOfContents]] == ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö À̶õ? == '''¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö'''(literate programming)Àº ÇÁ·Î±×·¡¹Ö ¹æ¹ý·ÐÀÇ ÇÑ °¡Áö·Î, ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§ ÄÄÇ»ÅÍ·Î ÄÄÆÄÀÏ °¡´ÉÇÑ Äڵ带 ¸¸µå´Â °Íº¸´Ù »ç¶÷ÀÌ ÀÌÇØÇϱ⠽¬¿î Äڵ带 ¸¸µå´Â °Í¿¡ ÁßÁ¡À» µÎ´Â ¹æ¹ýÀÌ´Ù. Áï, »ç¶÷ÀÌ º¸°í ÀÌÇØÇÒ ¼ö ÀÖµµ·Ï ¹®¼­¸¦ ¸¸µéµíÀÌ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â °ÍÀÌ ¸ñÀûÀÌ´Ù. '¸¶Ä¡ ¹®ÇÐÀÛÇ°À» Àд °Íó·³ ÇÁ·Î±×·¡¹ÖÀ» ÀÐÀ» ¼ö ÀÖµµ·Ï ¸¸µå´Â °Í'ÀÌ ¸ñÇ¥À̹ǷΠ'¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö'À̶ó´Â À̸§À» Áö¾ú´Ù. (Ãâó: ''À§Å°¹é°ú-¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö'') === ±â¿ø ¹× ¼Ò°³ === ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö(''Literate programming'')Àº ¿ì¸®¿¡°Ô TeXÀÇ ÀúÀÚ·Î ¾Ë·ÁÁø Knuth°¡ ¸¸µé¾î³½ ÇÁ·Î±×·¡¹ÖÀÇ »õ·Î¿î Æз¯´ÙÀÓÀÔ´Ï´Ù. Knuth°¡ ÀÌ¿¡ ´ëÇÑ °³³äÀ» ±¸Ã¼È­Çϱ⠽ÃÀÛÇÑ °ÍÀÌ 1980³â´ë ÃʹÝÀ̴ϱî 2006³â ÇöÀç·Î½á´Â '»õ·Î¿î'À̶õ ´Ü¾î°¡ Á» ¹«»öÇØ Áý´Ï´Ù. ÇÏÁö¸¸ ÇöÀç±îÁöµµ ±×¸® ³Î¸® ÀÌ¿ëµÇ°í ÀÖÁö´Â ¾ÊÀ¸µí ½Í½À´Ï´Ù. Àü»êÇп¡´Â Àü»êÇÐÀÇ ³ëº§»óÀ̶ó ºÒ¸®´Â Æ©¸µ»ó(A. M. Turing Award: http://awards.acm.org/turing/) ÀÌ ÀÖ½À´Ï´Ù. 1974³â Æ©¸µ»ó ¼ö»óÀÚ´Â ¾Ë°í¸®ÁòÀÇ ºÐ¼®°ú ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ µðÀÚÀÎ ±×¸®°í, ''The art of computer programming'' À̶ó´Â Àú¼­·Î ±× ºÐ¾ß¿¡ ¸¹Àº °øÇåÀ» ÇÑ Knuth ¿´½À´Ï´Ù. °ü·Ê(?)·Î½á ±× ÇØ Æ©¸µ»óÀ» ¹ÞÀº »ç¶÷Àº ACM Turing Award Lecture¶ó´Â À̸§À¸·Î °­ÀǸ¦ ÇÏ°Ô µÇ¾î Àִµ¥, 1974³â ±× °­ÀÇÀÇ Á¦¸ñÀº ''Computer Programming as an Art''(attachment:knuth-turingaward.pdf)¿´½À´Ï´Ù. Knuth´Â ¿©±â¼­ ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» ´Ü¼øÇÑ ±â¼úÀÌ ¾Æ´Ñ À½¾Ç, ¹Ì¼ú, ¹®Çаú °°Àº Á¾·ùÀÇ ÇϳªÀÇ ¿¹¼ú È°µ¿À̶ó°í °­Á¶ÇÏ°í ÀÖ½À´Ï´Ù. ±×¸®°í °á·ÐºÎ¿¡´Â ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¸Ó ÀÚ½ÅÀÌ ¿¹¼ú°¡¶ó´Â ÀνÄÀ» °¡Áö°í ÇÁ·Î±×·¡¹Ö ÀÛ¾÷¿¡ ÀÓÇϸé, ÇÁ·Î±×·¡¹ÖÀÌ ´õ¿í Áñ°Ì°í, ±× °á°ú ¶ÇÇÑ ´õ¿í ÁÁÀ» °ÍÀ̶ó°í ¸»ÇÕ´Ï´Ù. To summarize: We have seen that computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better. Therefore we can be glad that people who lecture at computer conferences speak about the state of the Art. ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀº ÀÌ·¸°Ô ½ÃÀÛÇß³ªº¾´Ï´Ù. ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» ¿¹¼ú·Î º¸´Â ´ë°¡·Î ºÎÅÍ ¸»ÀÔ´Ï´Ù. À§ÀÇ °­ÀǸ¦ ½ÃÀÛÀ¸·Î ´«¿¡ º¸ÀÌ´Â º»°ÝÀûÀÎ ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀÇ ½ÃÀÛ ¶ÇÇÑ KnuthÀÇ ³í¹® Literate Programming (attachment:knuthweb.pdf) ¿¡¼­ ½ÃÀÛÇÕ´Ï´Ù. ÀÌ ³í¹®¿¡¼­ Knuth´Â ´õÀÌ»ó ÄÄÇ»Å͸¦ À§ÇØ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â ½Ã´ë´Â Áö³µ´Ù°í ¸»ÇÕ´Ï´Ù. »ç¶÷À» À§ÇÑ ÇÁ·Î±×·¡¹ÖÀ» ÇÏÀÚ°í ÇÕ´Ï´Ù. ¹°·Ð ÇÁ·Î±×·¡¹ÖÀ̶ó´Â °ÍÀÌ ÄÄÇ»ÅÍ¿¡ ÀÏÀ» ½ÃÅ°±â À§ÇÑ ¸í·ÉµéÀÇ ÁýÇÕÀÌÁö¸¸, ÀÌ°Í¿¡ ¿¬¿¬ÇÏ¿© ³Ê¹« ÄÄÇ»ÅÍ¿¡¸¸ ÃÊÁ¡À» ¸ÂÃßÁö ¸»°í, »ç¶÷µé¿¡°Ô ´«À» µ¹¸®ÀÚ´Â °ÍÀÌÁö¿ä. ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀÇ ¸£³×»ó½º ½Ã´ë°¡ ¿Â °ÍÀÌÁö¿ä. ÀÌ ³í¹®¿¡¼­ ¿ª½Ã ÀÏ°üµÇ°Ô ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» ¹®ÇÐ ÀÛÇ°(''works of literature'') À¸·Î °£ÁÖÇÏ°í, Àç¹ÌÀÖ´Â ¸»ÀÎ ''Literate Programming'' À̶õ ¸»À»¸¸µé¾î ³Â½À´Ï´Ù. Knuth´Â ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀ» ´Ü¼øÇÑ ¸»Àå³­¿¡ ±×Ä¡´Â °ÍÀ» ½È¾îÇؼ­ WEBÀ̶ó´Â ½Ã½ºÅÛÀ» ¸¸µé¾î ³Â½À´Ï´Ù. TeXÀÌ WEB ½Ã½ºÅÛÀ¸·Î ¸¸µé¾îÁ³´Ù´Â °ÍÀº Àß ¾Ë·ÁÁø »ç½ÇÀÌÁö¿ä. I believe that the time is ripe for significantly better documentation of programs, and that we can best achieve this by considering programs to be works of literature. Hence, my title: ''Literate Programming.'' Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do. * WEB À¸·Î ÀÛ¼ºµÈ TeX ¼Ò½º: http://ftp.ktug.or.kr/tex-archive/systems/knuth/tex/tex.web ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» º»°ÝÀûÀ¸·Î ÀÍÈ÷°íÀÚ ÇÏ´Â »ç¶÷µéÀº ¹Ýµå½Ã ÀоîºÁ¾ß ÇÑ´Ù°í ÇÕ´Ï´Ù. TeX¿¡ Àͼ÷ÇØÁö¸é Çѹø µµÀüÇØ º¸°íÀÚ ÇÕ´Ï´Ù. * °ü½ÉÀÖ´Â ºÐÀ» À§ÇÏ¿©: pdf ÆÄÀÏÀ» ¸¸µé¾î³»´Â °úÁ¤À» ´ÙÀ½°ú °°½À´Ï´Ù. À§ÀÇ tex.webÀ» ´Ù¿î¹ÞÀ¸½Ã°í, {{{ % weave tex.web <-- tex.web ÆÄÀÏ¿¡¼­ tex.tex ÆÄÀÏÀ» ¾ò½À´Ï´Ù. % tex tex.tex <-- texÀÌ ¼¼¹øÀ̳ª ¾²¿´³×¿ä. :) ÀÌÇÏ °úÁ¤Àº ¼³¸í ¾ÈÇصµ Àß ¾Æ½Ã¸®¶ó ¹Ï½À´Ï´Ù. % dvipdfmx tex.dvi }}} À§Ã³·³ ÇÏ¿© ¸¸µé¾î Áø Ã¥ÀÌ ¹Ù·Î KnuthÀÇ Àú¼­ ''Computers & Typesetting'' ½Ã¸®ÁîÀÇ Volume BÀÎ ''TeX: The Program'' ÀÔ´Ï´Ù. Volume DÀÎ ''METAFONT: The Program''Àº http://ftp.ktug.or.kr/tex-archive/systems/knuth/mf/mf.web À» ´Ù¿î¹ÞÀ¸¼Å¼­ À§¿Í °°ÀÌ pdf¸¦ ¸¸µé¾î ³»½Ã¸é µË´Ï´Ù. ¿©·¯ºÐ µ· Àý¾àÇϽŠ°Ì´Ï´Ù. === KnuthÀÇ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö °­ÀÇ ºñµð¿À === Knuth´Â 1987³â 10~12¿ù¿¡ ½ºÅÄÆ÷µå´ëÇп¡¼­ ''Mathematical Writing''À̶õ Á¦¸ñÀ¸·Î °­ÀǸ¦ ÇÏ¿´½À´Ï´Ù. ±× Áß ÀϺΰ¡ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö¿¡ °üÇÑ ³»¿ëÀÔ´Ï´Ù. ¿µ¾î°¡ ª¾Æ¼­ ´Ù ¾Ë¾ÆµèÁö´Â ¸øÇϴµ¥, ÇÑ°¡Áö ´ÙÇàÀÎ Á¡Àº °­ÀÇ Á¦¸ñ°ú µ¿ÀÏÇÑ Mathematical Writing À̶õ Ã¥ÀÌ Àִµ¥, ±× Ã¥Àº ÀÌ °­ÀǸ¦ ¼ö°­ÇÑ Çлýµé°ú Knuth°¡ ¸¸µç Ã¥À¸·Î "°­ÀÇ ³ëÆ®"ÀûÀÎ ¼º°ÝÀÌ Â£½À´Ï´Ù. ÀÌ¿¡ ±× Ã¥¿¡¼­ ÇØ´ç °­ÀÇ ºÎºÐÀ» ¿Ã¸³´Ï´Ù. ºñµð¿À ½Ãû¿¡ ¸¹Àº µµ¿òÀÌ µÇ¸®¶ó º¾´Ï´Ù. * Presenting algorithm (°­ÀÇ ¿ä¾àº»: attachment:pa.pdf) http://proedvid.stanford.edu/seminars/knuth/871019-cs209/871019-cs209-100.wmv * Literate Programming(1) (°­ÀÇ ¿ä¾àº»: attachment:lp1.pdf) http://proedvid.stanford.edu/seminars/knuth/871021-cs209/871021-cs209-100.wmv * Literate Programming(2) (°­ÀÇ ¿ä¾àº»: attachment:lp2.pdf) http://proedvid.stanford.edu/seminars/knuth/871023-cs209/871023-cs209-100.wmv == CWEB ½Ã½ºÅÛ == === CWEB ¼Ò°³ === $$\hbox{CWEB}=\hbox{C programming language}+\hbox{\TeX}$$ from KTUGContrib:3195 (by ÀÛÀº³ª¹«) ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛÀ¸·Î °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â °ÍÀÌ ¾Æ¸¶ CWEBÀÏ °ÍÀÔ´Ï´Ù. ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛÀº ±âº»ÀûÀ¸·Î Á¶ÆǾð¾î¿Í ÄÄÇ»ÅÍÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ±¸¼ºµÇ´Âµ¥, CWEBÀº °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â Á¶ÆǾð¾îÀÎ TeX°ú °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â C¾ð¾îÀÇ Á¶ÇÕÀ¸·Î ±¸¼ºµÈ ½Ã½ºÅÛÀÔ´Ï´Ù. µû¶ó¼­ CWEBÀÌ °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â ½Ã½ºÅÛÀ̶ó°í Çؼ­ ÀÌ»óÇÒ °ÍÀÌ Çϳªµµ ¾ø°ÚÁö¿ä? CWEBÀº TeX ÇÁ·Î±×·¥À» ¸¸µå´Âµ¥ »ç¿ëµÈ WEB ½Ã½ºÅÛº¸´Ù ÇÑÃþ ³ªÀº ½Ã½ºÅÛÀÔ´Ï´Ù.WEBÀº TeX°ú Pacal ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ÀÌ·ç¾îÁ®Àִµ¥, C¾ð¾î°¡ Pascalº¸´Ù´Â ³ªÀº(?) ÇÁ·Î±×·¡¹Ö ¾ð¾îÀ̱⠶§¹®À̶ø´Ï´Ù. ¾Æ·¡ ÷ºÎÆÄÀÏÀº CWEBÀÇ ¸Þ´º¾óÀÎ cwebman.texÀÇ ÃʹݺÎÀÇ ³»¿ëÀÎ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö°ú CWEBÀÇ °³³äÀ» ¹ø¿ªÇÑ °ÍÀÔ´Ï´Ù. ¸Þ´º¾óÀÇ ÈĹݺδ ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹Ö¿¡ °ü·ÃµÈ ºÎºÐÀ̶ó »ý·«Çß½À´Ï´Ù. attachment:korean_cwebman.pdf CWEB ½Ã½ºÅÛ ¸»°íµµ ¸¹Àº ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛµéÀÌ Á¸ÀçÇÕ´Ï´Ù. http://www.literateprogramming.com À¥»çÀÌÆ®¸¦ ¹æ¹®ÇØ º¸½Ã¸é, ¸Å¿ì ´Ù¾çÇÑ ½Ã½ºÅÛµéÀ» Á¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ »çÀÌÆ®´Â KnuthÀÇ À¥ÆäÀÌÁö¿¡µµ ¼Ò°³µÈ ¸Å¿ì ÈǸ¢ÇÑ À¥»çÀÌÆ®ÀÔ´Ï´Ù. === CWEB »ç¿ë¹ý === $$\hbox{cweb}=\hbox{ctangle}+\hbox{cweave}$$ * È®ÀåÀÚ°¡ .wÀÎ ÅؽºÆ® ÆÄÀÏ, ¿¹¸¦µé¾î foo.w À̶õ ÆÄÀÏÀ» ¸¸µì´Ï´Ù. foo.w´Â web ȤÀº cweb ÆÄÀÏÀε¥, ÇÁ·Î±×·¡¹Ö ¼Ò½º¿Í ±×¿¡ ÇØ´çÇÏ´Â µµÅ¥¸ÕÆ®¸¦ µ¿½Ã¿¡ °¡Áö°í ÀÖ´Â ÆÄÀÏÀÔ´Ï´Ù. cweb ÇÁ·Î±×·¡¹ÖÀ» ÇÒ¶§´Â, ÀÌó·³ ÇÁ·Î±×·¡¹Ö°ú µµÅ¥¸ÕÆ®¸¦ µ¿½Ã¿¡ »ý°¢ÇØ¾ß ÇÕ´Ï´Ù. * ¾Æ·¡¿Í °°Àº ¸í·É¾î·Î cweb ÆÄÀÏ foo.w·ÎºÎÅÍ ÇÁ·Î±×·¡¹Ö ¼Ò½º ÆÄÀÏ foo.c(ȤÀº foo.cpp)À» ¸¸µé¾î³À´Ï´Ù. {{{ % ctangle foo }}} * ctangle·Î ºÎÅÍ »ý¼ºµÈ foo.c¸¦ gcc°°Àº C ÄÄÆÄÀÏ·¯¸¦ ÀÌ¿ëÇؼ­ ½ÇÇà ÆÄÀÏÀ» ¸¸µé¾î ³À´Ï´Ù. * ´ÙÀ½ÀÇ ¸í·É¾î·Î´Â foo.w·Î ºÎÅÍ TeX ÆÄÀÏÀÎ foo.texÀ» ¾ò½À´Ï´Ù. {{{ % cweave foo }}} * cweave·Î ºÎÅÍ ³ª¿Â foo.texÀº PlainTeXÀ» ÀÌ¿ëÇÏ¿© foo.dvi¸¦ ¸¸µì´Ï´Ù. {{{ % tex foo }}} ¶Ç´Â, pdfÀÇ ±â´ÉÀ» ½ÊºÐ ¹ßÈÖÇÏ°í ½ÍÀ¸½Ã´Ù¸é, ´ÙÀ½°ú °°ÀÌ ÇÏ½Ã¸é µË´Ï´Ù. {{{ % tex "\let\pdf+ \input foo" }}} * ¿ø·¡ÀÇ cweb ½Ã½ºÅÛÀº PlainTeX ¸ÅÅ©·Î¸¦ ÀÌ¿ëÇÕ´Ï´Ù¸¸, LaTeXÀ» ÀÌ¿ëÇÑ cwebµµ ÀÖ½À´Ï´Ù. (LaTeX¿ë CWEB: attachment:cweb-user.pdf) À§ °úÁ¤À» ±×¸²À¸·Î ³ªÅ¸³»¸é ´ÙÀ½°ú °°½À´Ï´Ù. attachment:cweave.jpg === Microsoft Visual C++¿¡¼­ CWEB ÇÁ·Î±×·¡¹Ö Çϱâ === CWEB ÇÁ·Î±×·¡¹Ö ÀÛ¾÷Àº ÀüÅëÀû(?)À¸·Î ¸í·ÉÇà¿¡¼­ ÀÌ·ç¾îÁ® ¿Ô½À´Ï´Ù (¹Ï°Å³ª ¸»°Å³ª). ÇÏÁö¸¸ ½Ã°£ÀÌ È帧¿¡ µû¶ó ´õÀÌ»óÀº °í¸®Å¸ºÐÇÏ°Ô º¸ÀÏ ¼öµµ ÀÖ´Â ¸í·ÉÇà¿¡¼­ÀÇ ÀÛ¾÷À» °íÁýÇÒ ¼ö ¾ø´Â »óȲÀÌ µÇ¾ú³ªº¾´Ï´Ù. °³¹ß ȯ°æÀº IDE¶ó´Â ¼ö·ÁÇÏ°í Æí¸®ÇÑ ÅëÇÕ °³¹ß ȯ°æÀ¸·Î ´ëüµÈÁö ÀÌ¹Ì ¿À·¡ÀÔ´Ï´Ù. ÀÌ¿¡ cweb ÇÁ·Î±×·¡¹Ö ÀÛ¾÷ ¿ª½Ã º¯È­ÀÇ È帧¿¡ ¹ß ¸ÂÃ߾ IDEÀÇ ´ëÇ¥°ÝÀ̶ó°í ÇÒ ¼ö ÀÖ´Â Microsoft Visual C++¿Í ¼ÕÀ» Àâ¾Ò½À´Ï´Ù. attachment:cwebmsvc.pdf À§ ¹®¼­´Â Visual C++¿¡¼­ cweb ÇÁ·Î±×·¡¹ÖÀ» Çϱâ À§ÇÑ ¼¼Æà ¹æ¹ý°ú »ç¿ë ¹æ¹ý, ¿©·¯°¡Áö cweb ÆÁÀÌ µé¾îÀÖ´Â À¯¿ëÇÑ ¹®¼­¶ó°í »ý°¢µË´Ï´Ù. === CWEB ¿¹Á¦ === Àú´Â C ÇÁ·Î±×·¡¹ÖÀ» ÇؾßÇÒ ¶§¸é, ¾ðÁ¦³ª CWEBÀ¸·Î ÇÁ·Î±×·¡¹ÖÀ» ÇÏ°í Àִµ¥, CWEB ÇÁ·Î±×·¡¹ÖÀº Á¤¸» Àç¹ÌÀÖ½À´Ï´Ù. Á¦ ¸»À» ¸ø ¹ÏÀ¸½Ã°Ú´Ù¸é, Knuth ¸»Àº ¹ÏÀ¸½Ã°ÚÁÒ? Knuth´Â Á¾Á¾ ±×ÀÇ Áý ¿¬±¸½Ç¿¡¼­ ³ª¿Ã ¶§ ÀÌ·¸°Ô ¸»ÇѴٳ׿ä. "''CWEB programming is such fun!''" * Knuth°¡ ¼Õ¼ö ÀÛ¼ºÇÑ CWEBÀÇ ´ëÇ¥ÀûÀÎ ¿¹Á¦: attachment:wc.pdf * CWEB ÇÁ·Î±×·¥ÀÇ ÁÖ¿Á°°Àº ¿¹Á¦µé (http://www.literateprogramming.com/fexamples.html) * Vector rotation CWEB ¿¹Á¦: attachment:vrotate.tar.gz * Á¸º¥Æ²¸®ÀÇ ''Programming Pearls'' Á¦1Ä÷³¿¡ ³ª¿À´Â ºñÆ®¸Ê Á¤·ÄÀ» cwebÀ¸·Î ÀÛ¼ºÇÑ ¿¹Á¦: attachment:bitmap.pdf * ²Ï¿À·¡Àü¿¡ Àç¹Ì»ï¾Æ ÀÛ¼ºÇÑ °ÍÀ¸·Î ÇϳëÀÌžÀ» Àç±ÍÀû ·çƾÀ» »ç¿ëÇÏÁö ¾Ê°í ±¸ÇöÇÑ ¿¹Á¦ÀÔ´Ï´Ù. ÇϳëÀÌž¿¡ ´ëÇÑ ¼³¸í ºÎºÐÀº mathworld (http://mathworld.wolfram.com/TowerofHanoi.html)¿¡¼­ ÀοëÇÏ¿´½À´Ï´Ù. plain TeX¿¡¼­ ÇѱÛÀ» ¾²´Â ¹æ¹ýÀ» ¸ð¸£´ø ½ÃÀý¿¡ Çß´ø °ÍÀÌ¶ó ¿µ¾î·Î µÇ¾î ÀÖ°í, ±×·¡¼­ ¼³¸íÀÌ ¸¹ÀÌ ºÎÁ·ÇÕ´Ï´Ù. attachment:hanoi.pdf == LaTeXÀ» ÀÌ¿ëÇÑ CWEB ÇÁ·Î±×·¡¹Ö == * KTUGContrib:3252 by [smcho] * KTUGContrib:3236 by [smcho] == CWEB ¼³Ä¡ ½Ã ÇѱÛ(UTF-8) °í·Á»çÇ× == '''ÁÖÀÇ''': ÀÌ ÀýÀÇ ³»¿ëÀº Hangul-ucs¸¦ ÀÌ¿ëÇÏ¿© ucsplain.tex¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡¸¸ ÇØ´çÇÏ´Â °ÍÀÌ°í, HLaTeXÀ» ÀÌ¿ëÇÏ¿©, htex.texÀ» »ç¿ëÇϽô ºÐÀ̶ó¸é, °ü°è¾ø´Â ³»¿ëÀÔ´Ï´Ù. UTF-8·ÎµÈ ÇѱÛÀ» Æ÷ÇÔÇÏ´Â cwebÀÇ ¼Ò½º ÆÄÀÏÀÎ .w ÆÄÀϷκÎÅÍ ctangle°ú cweave ¸í·É¾î¸¦ ÀÌ¿ëÇؼ­ C ÇÁ·Î±×·¥ ÆÄÀÏÀÎ .c ÆÄÀÏ°ú TeX ÆÄÀÏÀÎ .texÀ» ¸¸µé´Ùº¸¸é, ÀÔ·ÂÀÌ ³Ê¹« ±æ´Ù´Â °æ°í ¸Þ½ÃÁö°¡ ³ª¿É´Ï´Ù. ÀÌ´Â À§¸í·É¾îµéÀÌ ÆÄÀÏÀ» ó¸®Çϱâ À§Çؼ­ ³»ºÎÀûÀ¸·Î ¹öÆÛ(char ¹è¿­)¸¦ °¡Áö°í ÀÖ°í, ±× ¹öÆÛÀÇ ³¡À» ³ªÅ¸³»´Â buffer_end°¡ À۾Ƽ­ ³ª¿À´Â °æ°í ¸Þ½ÃÁöÀÔ´Ï´Ù. ÀÌ °æ¿ì´Â ¹öÆÛÀÇ ³¡À» ³ªÅ¸³»´Â º¯¼ö buffer_end¸¦ ÃæºÐÈ÷ Å©°ÔÇØÁÖ¸é ¹ß»ýÇÏÁö ¾Ê´Â °æ°í ¸Þ½ÃÁöÀÔ´Ï´Ù. ¿µ¾îÀÇ °æ¿ì´Â ¾ËÆĺª Çѹ®ÀÚ°¡ 1¹ÙÀÌÆ®À̱⠶§¹®¿¡ ±×·¯ÇÑ °æ°í ¸Þ½ÃÁö°¡ ¾ø½À´Ï´Ù. (¹°·Ð ¿µ¾îÀÇ °æ¿ìµµ ÇÑ ÁÙÀ» ³Ê¹« ±æ°ÔÇÏ¸é ±×·± ¸Þ½ÃÁö°¡ ³ª¿À°ÚÁÒ.) utf-8·Î µÈ °æ¿ì´Â ÇÑ ¹®ÀÚ¸¦ 1¹ÙÀÌÆ®¿¡¼­ ÃÖ´ë 4¹ÙÀÌÆ®±îÁö Ç¥ÇöÇÑ´Ù°í ÇÕ´Ï´Ù. µû¶ó¼­ utf-8·Î ÀÛ¼ºµÈ ¼Ò½ºÀÇ °æ¿ì¸¦ À§Çؼ­ buffer_end¸¦ ÃÖ´ë 4¹è°¡ µÇ°ÔÇÏ¸é µË´Ï´Ù. ctangle°ú cweaveÀÇ È­ÀÏ ÀÔÃâ·Â¿¡ ´ëÇÑ ºÎºÐÀ̳ª °øÅë ºÎºÐÀº common.w¿¡ Àִµ¥, buffer_end¿¡ ´ëÇÑ ³»¿ëÀÌ ¹Ù·Î ÀÌ ÆÄÀÏ¿¡ ÀÖ½À´Ï´Ù. common.wÀÇ ÀϺΠ{{{ @d buf_size 100 /* for \.{CWEAVE} and \.{CTANGLE} */ @d longest_name 1000 @d long_buf_size (buf_size+longest_name) /* for \.{CWEAVE} */ ... @= char buffer[long_buf_size]; /* where each line of input goes */ char *buffer_end=buffer+buf_size-2; /* end of |buffer| */ ... }}} µû¶ó¼­ buf_size¸¦ ÃÖ´ë 4¹è Å©°ÔÇÏ´ø°¡, ¾Æ´Ï¸é, buffer_end¸¦ Á¤ÀÇÇÏ´Â ºÎºÐ¿¡ »ç¿ëÇÑ buf_size ´ë½Å¿¡ long_buf_size¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù. Àú´Â cwebÀ» ¼³Ä¡ÇÒ¶§, µÎ¹ø° ¹æ¹ýÀ» »ç¿ëÇؼ­ ¼³Ä¡Çؼ­, utf-8·Î µÈ ¹®¼­¸¦ ÄÄÆÄÀÏÇÒ¶§µµ ctangleÀ̳ª cweave°¡ ¹¬¹¬È÷ ±×Àú Á¦ ÇÒ ÀÏÀ» ÇÕ´Ï´Ù. ÀÌ°ÍÀÌ utf-8·Î µÈ ¹®¼­ÀÇ ±Ùº»ÀûÀÎ ÇØ°áÃ¥ÀÎÁö, ÀӽùæÆíÀûÀÎ ¹æ¹ýÀÎÁö´Â ¸ð¸£°ÚÀ¸³ª, Àû¾îµµ À§ÀÇ °æ°í ¸Þ½ÃÁö¸¦ ¾ø¾Ù ¼ö´Â ÀÖ½À´Ï´Ù. '''Âü°í''' cweb¿¡ °ü·ÃÇÑ ÇÁ·Î±×·¥ ¼Ò½º¸¦ °íÄ¥ ÀÏÀÌ ÀÖÀ» ¶§, ÇØ´ç ¼Ò½º¸¦ Á÷Á¢ °íÄ¡´Â ÀÏÀº ¿Ã¹Ù¸¥ ¹æ¹ýÀÌ ¾Æ´Õ´Ï´Ù. cweb¿¡´Â ÀÌ·¯ÇÑ °æ¿ì¸¦ À§Çؼ­ È®ÀåÀÚ°¡ .ch ÀÎ change ÆÄÀÏ ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. ¿¹¸¦µé¾î À§ÀÇ °æ¿ì ó·³ common.w ÆÄÀÏÀ» ¼öÁ¤ÇÒ ÀÏÀÌ ÀÖÀ¸¸é, comm-utf8.ch ¿Í °°Àº ÆÄÀÏÀ» ¸¸µé¾î¼­ common.c ÆÄÀÏÀ» ¸¸µé¾î ³¾¶§, {{{ ctangle common.w comm-utf8.ch }}} ¿Í °°ÀÌ ÇÏ¸é µË´Ï´Ù. comm-utf8.ch¿¡ µé¾î°¡´Â ³»¿ëÀº {{{ @x char *buffer_end=buffer+buf_size-2; /* end of |buffer| */ @y char *buffer_end=buffer+long_buf_size-2; /* end of |buffer| */ @z }}} ¿Í °°ÀÌ ÇÏ½Ã¸é µË´Ï´Ù. (.ch ÆÄÀÏÀ» ¸¸µå´Â ¹æ¹ýÀº cweb »ç¿ëÀÚ ¼³¸í¼­ÀÎ cwebman.pdf¸¦ º¸½Ã¸é Àß ³ª¿ÍÀÖ½À´Ï´Ù.) ¿øº» .w ÆÄÀÏÀ» Á÷Á¢ ¼öÁ¤Çϼŵµ ¹®Á¦°¡ µÉ °ÍÀº ¾ø½À´Ï´Ù¸¸ Á¤¼®ÀÌ ¾Æ´Ï¶ó´Â °ÍÀÌÁÒ.