ÀÚ¿¬¾î ó¸®
ÀΰøÁö´ÉÀÇ ¿ø¸®¿Í ½Ç¹«»ç·Ê : À̱¤Çü. È«À¯½Ä. ±èÀÎÅÃ. ÁøÇö¼ö. ¹ÎÁØ¿µ. ÁÖ¿µÈÆ °øÀú, µ¿¿µÃâÆÇ»ç, 1998, page 97~124
2. °£´ÜÇÑ ÀÚ¿¬¾ð¾î ó¸®ÇÁ·Î±×·¥ 3. ELIZA Á¤½Åº´È¯ÀÚ Áø´Ü ÇÁ·Î±×·¥
|
Áö´ÉÀ» °¡Áø Robot °¡ ¿ì¸®Àΰ£ÀÇ ¸»À» ¾î¶»°Ô ÀÌÇØÇÏ°í ±¸¹® ÇØ¼®ÇÏ¿© ¿ì¸®°¡ ³»¸° ¸í·É¿¡ ´ë´äÀ» Çϰí ÇൿÇϴµ¥ °¡Àå ±âº»ÀÌ µÇ´Â Turbo Prolog ÀÇ List ±¸Á¶¸¦ ÀÌÇØÇÏ°í °£´ÜÇÑ ¹®Àå º¯È¯ ÇÁ·Î±×·¥°ú ELIZA Á¤½Åº´È¯ÀÚ ÇÁ·Î±×·¥¿¡ °üÇØ¼ ¾Ë¾Æº»´Ù.
¾î¶°ÇÑ °ÍÀ» ÀÌÇØÇÑ´Ù´Â °ÍÀº À̸¦ ÇÑ Ç¥ÇöÀ¸·ÎºÎÅÍ ´Ù¸¥ Ç¥ÇöÀ¸·Î º¯È¯½ÃŰ´Â °ÍÀ» ¶æÇÑ´Ù. COMPUTER °¡ ¾ð¾î¸¦ ÀÌÇØÇÒ ¼ö ÀÖ´Ù´Â °ÍÀº ÀԷ¹® (ÀÚ¿¬¾î) À» ÀÀ¿ë½Ã½ºÅÛÀÌ Á¶ÀÛ °¡´ÉÇÑ Ç¥ÇöÇü (ÀǹÌÇ¥Çö) À¸·Î ÄÄÇ»ÅͰ¡ º¯È¯ÇÒ ¼ö ÀÖÀ½À» ¸»ÇÑ´Ù. ÀÌ·¯ÇÑ ÀÚ¿¬¾îÀÌÇØ´Â [±×¸² 1] ·Î ¼³¸íµÈ´Ù.
[±×¸² 1] ÀÚ¿¬¾î ÇØ¼® ½Ã½ºÅÛÀÇ ÀϹÝÀû ±¸¼º
ÀÚ¿¬¾î ÀÌÇØ °úÁ¤¿¡¼ ´ÙÀ½¿¡ ¼³¸íµÇ´Â 5 °¡ÁöÀÇ ÀÚ¿¬¾î 󸮱â¼ú·Î ºÐ·ùÇÒ ¼ö ÀÖ´Ù.
(1) ÇüÅÂ¼Ò ÇØ¼®
ÀÚ¿¬¾î 󸮸¦ À§ÇÑ ´Ü¾îÀÇ ÃÖ¼Ò´ÜÀ§ÀÎ ÇüżҷΠºÐ¸®ÇÏ´Â ÇüÅÂ¼Ò ÇØ¼®¿¡¼´Â ÀÔ·ÂµÈ ¹®ÀåÀ» ±¸¼ºÇÏ´Â ´Ü¾î¸¦ ¹®ÀåÀÇ ELEMENT ·Î ºÐ¼®ÇÏ´Â °ÍÀε¥ ÇüÅÂ¼Ò »çÀüÀÌ ÁغñµÇ´Â °ÍÀ¸·Î¼ ¹®Á¦°¡ ¾ø¾îÁö´Â °ÍÀÌ ¾Æ´Ï°í ¸¹Àº °æ¿ì¿¡¼´Â Çѱ¹¾î³ª ÀϺ»¾îÀÇ ¾îÇüº¯È ¹× ÷°¡¿¡¼ ¹ß»ýÇÏ´Â ¾îÀýºÐ¸®°¡ ¾Ö¸Å¸ðÈ£ÇÑ ºÎºÐÀ̶óµç°¡ ¿µ¾î¿¡ ÀÖ¾î¼ÀÇ ½ÃÁ¦º¯È µ¿»çÀÇ È°¿ë µî¿¡¼ ±ÔÄ¢º¯È°¡ ¾Æ´Ñ ÇÑ¿¡´Â »çÀüÀÇ ENTRYWORD ·Î¼´Â ÇØ°áµÇÁö ¾Ê´Â´Ù. µû¶ó¼ ÀÔ·ÂµÈ ¹®ÀåÀ» ÇüÅÂ¼Ò ÇØ¼®ÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇØÁö´Âµ¥ ÀÌ·¯ÇÑ ¾îÇü º¯È ±ÔÄ¢Àº ºñ±³Àû ´Ü¼øÇÏ¿© COMPUTER °¡ ÇØ¼®ÇÏ´Â °ÍÀº ±×¸® ¾î·ÆÁö´Â ¾Ê´Ù. ´Ù¸¸ Çѱ¹¾îÀÇ °æ¿ì¿¡´Â ¶ç¾î ¾²±â°¡ È®¸³µÇ¾î ÀÖ´Ù ÇÏ´õ¶óµµ ÀÛ¹®ÀÚÀÇ ÆÇ´ÜÀÌ Á¤È®ÇÏÁö ¸øÇÑ Ã¶ÀÚ¹ýÀÌ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¹Ç·Î À¯ÀÇÇÒ Çʿ䰡 ÀÖ´Ù. ÇöÀç´Â ÇüÅÂ¼Ò ÇØ¼®ÀÌ ºÒ°¡´ÉÇÑ °æ¿ì¿¡ ´ëÇØ¼ ±¸¹®Çؼ® ±â¹ýÀ» º´Çà ó¸®ÇÔÀ¸·Î½á ÇüÅÂ¼Ò ÇØ¼®ÀÇ Á¤µµ(ïñÓø)¸¦ Çâ»ó½ÃŰ´Â ¿¬±¸°¡ ÁøÇàÁßÀÌ´Ù.
(2) ±¸¹®Çؼ®
ÇüÅÂ¼Ò ÇØ¼® °á°ú´Â ±¸¹®Çؼ®¿¡ ÀÇÇØ ¹®¹ýÀûÀ¸·Î Ÿ´çÇÑ ´Ü¾îÀÇ ³ª¿Àΰ¡°¡ ºÐ¼®µÈ´Ù. ±¸¹®Çؼ®¿¡ »ç¿ëµÇ´Â ¹®¹ý±ÔÄ¢ÀÌ CONTEXT FREE GRAMMER ±ÔÄ¢ÀÎ °æ¿ì´Â °í¼ÓÀÇ ±¸¹®Çؼ® ALGORITHM ÀÌ °³¹ßµÇ¾î Àִµ¥ ±¸¹®Çؼ®¿¡¼ Áß¿äÇÑ ¹®Á¦´Â ±¸¹®Çؼ®¿¡ »ç¿ëÇÏ´Â ´ë±Ô¸ðÀûÀÎ ¹®¹ý±ÔÄ¢ÀÌ ÀÛ¼ºµÇ¾î ÀÖÁö ¾Ê°í ÀÖ´Ù´Â °ÍÀÌ´Ù. ¹®¹ý ±ÔÄ¢ÀÇ ÀÛ¼º¿¡´Â ¾ð¾îÇÐÀÚµéÀÇ Çù·ÂÀ» ÇÊ¿ä·Î Çϸç ÀÛ¼ºµÈ ¹®¹ý±ÔÄ¢À» »ç¿ëÇÏ¿© ±â°è »ó¿¡¼ ½ÇÁ¦ÀÇ ¹®ÀåÀ» ÀÔ·ÂÇÏ¿© ¹Ýº¹ÀûÀ¸·Î ½ÇÇèÇØ¾ß ÇÑ´Ù. ±×·¸°Ô ÇÏÁö ¾ÊÀ¸¸é ¹®¹ý±ÔÄ¢¿¡ ºÒÇÊ¿äÇÑ ¾Ö¸ÅÇÔÀÌ ºÎ°¡µÇ±â ¶§¹®¿¡ ¹Ù¶÷Á÷ÇÏÁö ¸øÇÑ ±¸¹®Çؼ®ÀÇ °á°ú°¡ ´Ù¼ö ¹ß»ýÇÏ¿© ÀÌÈÄÀÇ Ã³¸®¿¡ ¾î·Á¿òÀ¸·Î ³²°Ô µÇ´Â °æ¿ì°¡ ¶§¶§·Î »ý±ä´Ù. ¶ÇÇÑ ±¸¹® ÀûÀÎ ´ÙÁß¼º (ambiguity) À̳ª ºÒÈ®½Ç¼º (Vagueness) ÀÇ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ ÇöÀç ÀǹÌÇØ¼®ÀÇ ±â¼úÀ» º´ÇàÇÏ´Â ¿¬±¸µµ ÁøÇàµÇ°í ÀÖ´Ù.
(3) ÀǹÌÇØ¼®
ÀǹÌÇØ¼®ÀÇ ÀÚ¿¬¾î 󸮱â¼úÀº ÇöÀç ¹ÌÇØ°áµÈ ¹®Á¦°¡ ¸Å¿ì ¸¹´Ù. ƯÈ÷ COMPUTER ³»ºÎ¿¡¼ Àǹ̸¦ ¾î¶² Çü½ÄÀ¸·Î Ç¥ÇöÇÏ¿© ¾î¶»°Ô Á¶ÀÛÇϴ°¡¿¡ ´ëÇÑ ¹®Á¦°¡ ¸¹ÀÌ ³²¾Æ Àִµ¥ ºñ·Ï ÀǹÌÀÇ Çü½ÄÀ» Á¤Çß´Ù ÇÏ´õ¶óµµ ±¸¹®Çؼ® °á°ú¿¡¼ ¾î¶»°Ô ±× Çü½ÄÀÇ Àǹ̸¦ ÃßÃâÇØ¾ß Çϴ°¡°¡ ¹®Á¦ÀÌ´Ù. ¶ÇÇÑ ±¸¹®Çؼ®¿¡¼ ¹ß»ýÇÑ ¹®Á¦¸¦ Á¦ÇѽÃ۱â À§ÇÏ¿© ÀǹÌÇØ¼® ±â¼úÀÌ »ç¿ëµÇ±âµµ ÇÑ´Ù. ¿¹¸¦ º¸ÀÚ.
[¹®Àå1] ¼Ò³âÀº ³Á°¡¿¡¼ ¼ö¿µÇϰí ÀÖ´Â ¼Ò³à¸¦ º¸¾Ò´Ù.
[¹®Àå2] ¼Ò³âÀº ´Ù¸® À§¿¡¼ ¼ö¿µÇϰí ÀÕ´Â ¼Ò³à¸¦ º¸¾Ò´Ù.
À§ÀÇ ¹®Àå¿¡¼ '³Á°¡¿¡¼' ¿Í '´Ù¸® À§¿¡¼' °¡ ¾î¶°ÇÑ ±¸¹®±¸Á¶·Î ÇØ¼®µÇ¾î¾ß ÇÒ °ÍÀΰ¡´Â ±¸¹® ÀûÀ¸·Î´Â ÇØ°áÀÌ µÇÁö ¸øÇϰí Àǹ̰ü°è¸¦ ºÐ¼®ÇÏ´Â ÀǹÌÇØ¼® ´Ü°è¿¡¼ ºñ·Î¼Ò °áÁ¤µÉ ¼ö ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. À̿ܿ¡ µ¿À½ÀÌÀÇ¾î ¹× ¹®¹ýÀû ´Ù±â´É ¾î°¡ Àִµ¥ ÀǹÌÇØ¼® ±â¼ú¿¡¼µµ ÇöÀç ÇØ°áÀÌ ¾î·Á¿î °æ¿ì°¡ ¸¹ÀÌ ¹ß»ýÇÑ´Ù. µû¶ó¼ ÇöÀçÀÇ Ã³¸®±â¼ú·Î¼´Â ¹®¸Æ ÇØ¼® ±â¼ú·Î ó¸®Çϰųª ´ë»ó¿¡ ¹ÐÂøµÈ Ç¥ÇöÀ» »ç¿ëÇÔÀ¸·Î½á Àΰ£ÀÌ ¿ÀÈ÷·Á ¹®Á¦¸¦ ÁÙÀÌ´Â ¹æ¹ýÀ» »ç¿ëÇϰí ÀÖ´Ù.
(4) ¹®¸ÆÇؼ®
ÀÌ ¹®¸ÆÇؼ®À» À§Çؼ´Â ÁÖ¾îÁø ¹®ÀåÀ» ÀÌÇØÇϰųª »óȲÀ» ÀνÄÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» ÄÄÇ»ÅͰ¡ º¸À¯ÇÏ°í¼ ´ëÈÀÇ È帧À» ÆÄ¾ÇÇϵµ·Ï Áö½ÄÀÇ »óÈ£°ü°è¸¦ ¸ðµâÈ ÇØ ÁÙ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.
(5) ¾ð¾î»ý¼º
¹®ÀåÀÇ ±¸Á¶¿Í ÀǹÌÇ¥ÇöÀÇ ´ëÀÀÀÌ "ÀÌÇØ"ÀÇ Á߽ɰúÁ¦
ÀÌ¿Í °°ÀÌ ÀÚ¿¬¾î ÀÌÇØÀÇ ¹®Á¦´Â ¹®ÀåÀ̶ó´Â Ç¥¸é»óÀÇ Ç¥ÇöÇü½Ä°ú ÀǹÌÇ¥Çö »çÀÌÀÇ ´ëÀÀ°ü°è¸¦ ÃëÇÏ´Â ¹®Á¦·Î µÈ´Ù.
[±×¸² 2] ÀÚ¿¬¾î ÀÌÇØÀÇ °úÁ¤
(1) ÀÏ ´ë ÀÏ º¯È¯
°¢°¢ ¹®ÀåÀÌ ±×¿¡ °ü·ÃµÈ À¯ÀÏÇÑ ¸ñÀû Ç¥ÇöÀ¸·Î º¯È¯µÈ´Ù. ¿¹·Î½á ¸¹Àº ÇÁ·Î±×·¡¹Ö ¾ð¾îµé¿¡¼ Á¸ÀçÇÏ´Â »ê¼úÀû Ç¥Çö ¾ð¾îµéÀ» »ý°¢ÇØ
º¸ÀÚ. ´ÙÀ½°ú °°Àº º¯È¯ÀÌ ÀϾ ¼ö ÀÖ´Ù.
:= |
(2) ´Ù¼ö ´ë ÀÏ º¯È¯
dzºÎÇÑ ¾îÈÖ·ÂÀ» °¡Áø ¾ð¾î·ÎºÎÅÍ ÀÛ°í ´Ü¼øÇÑ ¸ñÀû Ç¥ÇöÀ¸·Î º¯È¯µÈ´Ù. ´Ù¼ö ´ë ÀϺ¯È¯Àº ÀÌÇØ ½Ã½ºÅÛÀÌ ¸ñÀû Ç¥ÇöÀÌ ±Ù¿ø ¾ð¾î¿¡¼ Ç¥ÇöµÇ¾îÁú ¼ö ÀÖ´Â ¿©·¯ ¹æ¹ýµé¿¡ ´ëÇØ ¾Ë¾Æ¾ß µÈ´Ù´Â °ÍÀ» ÇÊ¿ä·Î ÇÑ´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°ÀÌ ÇÙ½É ´Ü¾î »öÃ⠽ýºÅÛ¿¡ ´ëÇÑ ¿µ¾î ¹®Àå¿¡¼ ÀϾ ¼ö ÀÖ´Â ´Ù¼ö ´ë ÀÏ º¯È¯À» ¹ß°ßÇÒ ¼ö ÀÖ´Ù.
Tell me all about the last. I'd like to see all the stories (SEARCH KEYWORDS I am interested in the last |
(3) ÀÏ ´ë ´Ù¼ö º¯È¯
»ý°¢µÇ¾îÁú ¼ö ÀÖ´Â ¿©·¯ º¹Àû Ç¥Çöµé Áß¿¡¼ Á¤È®ÇÑ ¼±ÅÃÀ» Çϱâ À§ÇØ ¸¹Àº ¾çÀÇ ºñ¾ð¾î Áö½ÄÀ» ¿ä±¸ÇÑ´Ù.
ÀÚ¿¬¾î ±¸¹®Çؼ®ÀÇ ¸ñÀûµµ Àΰø¾ð¾îÀÇ °æ¿ì¿Í ¸¶Âù°¡Áö·Î ºÎºÐ Ç¥Çö³¢¸®ÀÇ »óÈ£°ü°è¸¦ ³ªÅ¸³»´Â ±¸Á¶¸¦ ¸¸µé¾î ³»´Â °ÍÀÌ´Ù. Àΰø¾ð¾îÀÇ °æ¿ì´Â ¾ð¾î¼³°èÀÚ°¡ ó¸® »óȲ¿¡ ¾Ë¸ÂÀº ¹®¹ýÀ» ÀÚÀ¯·ÎÀÌ ¼³Á¤ÇÒ ¼ö Àִµ¥ ¹ÝÇØ ÀÚ¿¬¾îÀÇ °æ¿ì´Â ó¸®ÇØ¾Æ ÇÒ ¹®ÀåÀÇ ÁýÇÕÀÌ ¿ì¼± ¾Õ¼ Á¸ÀçÇÑ´Ù. ±×¶§ Á¸ÀçÇÏ´Â ¹®ÀåÀÇ ÁýÇÕÀ» ±ÔÁ¤ÇÏ´Â ¹®¹ýÀ» ¼³Á¤ÇÏ´Â °ÍÀÌÁö ±¸¹®Çؼ®ÀÇ »óȲ¿¡ ¾Ë¸ÂÀº ¹®¹ýÀ» °¡Áø ¾ð¾î¸¦ ¼³°èÇÏ´Â °ÍÀº ¾Æ´Ï±â ¶§¹®¿¡ ÀÚ¿¬¾îÀÇ ±¸¹®Çؼ®Àº ±× ¸¸Å ¾î·Á¿öÁö´Â °ÍÀÌ´Ù.
(1) ÀÚ¿¬¾î ±¸¹®Çؼ®ÀÇ ¾î·Á¿ò
1) ÀÚ¿¬¾î¿¡´Â ¸¹Àº ¾Ö¸Å¸ðÈ£¼ºÀÌ ÀÖ´Ù. Áï ÀԷ¹® ÁßÀÇ µ¿ÀÏ °³¼Ò¿¡ Àû¿ë °¡´ÉÇÑ ±ÔÄ¢ÀÌ º¹¼ö°³ Á¸ÀçÇÏ´Â ¼ö°¡ ¸¹°í ¾î¶² ±ÔÄ¢ Àû¿ëÀÌ ÃÖÁ¾ÀûÀ¸·Î ¿Ã¹Ù¸¥ °á°ú¿¡ À̸¦ °ÍÀÎÁö°¡ ±ÔÄ¢Àû¿ë ½ÃÁ¡¿¡¼´Â ÆÇ´Ü ºÒ°¡´ÉÇÏ´Ù. µû¶ó¼ ±¸¹®Çؼ® ±â¹ýÀº ¹«¾ð°¡ÀÇ ÇüÅ·ΠÀÌ ºñ°áÁ¤¼ºÀ» ÀÏÀÏÀÌ »ìÆì¾ß ÇÑ´Ù.
2) ÀÚ¿¬¾îÀÇ ¹®¹ý±ÔÄ¢Àº ¸í»ç³ª µ¿»ç¿Í °°Àº ǰ»çÀÇ ·¹º§¸¸À¸·Î´Â Á¦ÇÑÀÌ ºÒÃæºÐÇÏ¸ç ¸¹Àº ¾Ö¸Å¸ðÈ£¼ºÀÌ »ý°Ü ¹ö¸°´Ù. ÀÌ·¯ÇÑ
¾Ö¸Å¸ðÈ£¼ºÀ» ÇÇÇϱâ À§Çؼ´Â µ¿»çÀÇ È°¿ë¼º ¸í»çÀÇ ¼ö(´Ü¼ö, º¹¼ö)¿Í °°Àº ´Ü¾îÀÇ ÇüÅÂÀûÀÎ Á¤º¸ ÀǹÌÀû Á¤º¸ µîÀ» Çʿ信 µû¶ó
ÂüÁ¶ÇØ¾ß ÇÑ´Ù.
3) ÀÚ¿¬¾îÀÇ ¹®¹ýÀ̶õ °ÍÀÌ °´°üÀûÀ¸·Î Á¸ÀçÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ´Ü¼øÈ÷ ¿ì¸®°¡ ¾ð¾îÇö»óÀ» °üÂûÇÏ¿© ±×°ÍÀ» ÀϹÝȽÃÄÑ ³õÀº µ¥ Áö³ªÁö
¾Ê´Â´Ù. µû¶ó¼ ÇöÁ¸ÇÏ´Â ¹®¹ýü°è°¡ ¾ð¾îÇö»ó ¸ðµÎ¸¦ ¼³¸íÇÒ ¼ö ÀÖÀ» °ÍÀ̶ó´Â º¸ÀåÀº ¾ø°í ¼³¸íÇÒ ¼ö ¾ø´Â ¾ð¾îÇö»óÀÌ ¹ß°ßµÇ¸é À̹Ì
¸¸µé¾îÁø ¹®¹ý±ÔÄ¢À» ±×¿¡ ¸ÂÃß¾î º¯°æÇØ¾ß ÇÑ´Ù. (°è¼ÓµÇ´Â ÇѱÛÀÇ °³Á¤)
4) ÀÚ¿¬¾î¿¡´Â ¿¹¿ÜÀûÀΠǥÇöÀÌ ²Ï ºó¹øÈ÷ ³ªÅ¸³ª±â ¶§¹®¿¡ ±×µé ¸ðµÎ¸¦ ó¸®ÇÒ ¹®¹ýÀÇ ±Ô¸ð´Â ¸Å¿ì Å« °ÍÀ¸·Î µÈ´Ù. ±Ø´ÜÀûÀÎ °æ¿ì
ÇϳªÀÇ ´Ü¾î¸¦ À§ÇÑ ±ÔÄ¢¸¸µµ ¸¸µé¾î¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ ´ë±Ô¸ð ¹®¹ýÀ» ÀÚÁÖ ¼öÁ¤ÇØ¾ß ÇϹǷΠ¹®¹ý ±ÔÄ¢ÀÇ Ç¥ÇöÀÌ °£´ÜÇÏ¸é¼ ¾Ë±â ½¬¿ï °Í
¶Ç ±ÔÄ¢ÀÇ Ãß°¡ ¼öÁ¤ÀÌ ¿ëÀÌÇÏ°Ô ÀÌ·ç¾îÁöµµ·Ï ¸ðµâ ±¸Á¶·Î µÇ¾î ÀÖÀ» °Í µîÀÌ Áß¿äÇÏ°Ô µÈ´Ù.
(1) ¹®¸ÆÀÚÀ¯Çü ¹®¹ý( Context Free Grammer : CFG )
Çü½Ä¾ð¾îÀÇ ¹®¹ý¿¡ Àû´çÇÑ Ç¥Çö·ÂÀ» °®Ãß°í ÀÖ°í ±¸¹®Çؼ® ¾Ë°í¸®ÁòÀÇ È¿À²µµ ÁÁÀº ¹®¹ý.
ÀÌ Çü½ÄÀ¸·Î ¹®¹ýÀ» Ç¥ÇöÇÒ °æ¿ì¿¡´Â ¾î¶°ÇÑ ¼ºÁúÀ» °¡Áø ºÎºÐ Ç¥ÇöÀÌ ¸ð¿©¼ º¸´Ù ³ÐÀº ¹üÀ§ÀÇ ¸ðÀÓÀÌ µÉ °ÍÀÎÁö¸¦ ´ÙÀ½°ú °°Àº µÇ¾²±â (rewrite) ±ÔÄ¢ÀÇ ÁýÇÕÀ¸·Î ³ªÅ¸³½´Ù.
1. S ¡æ NP . VP . PP
2. VP ¡æ V . NP
3. NP ¡æ DET . N
4. NP ¡æ N
5. PP ¡æ PREP . NP
6. N ¡æ boy, letter, pen
7. DET ¡æ a, the
8. V ¡æ write, writes
9. PREP ¡æ with
´Ü¼øÇÑ CFG ·Î´Â ÀÚ¿¬¾î°¡ °®°í ÀÖ´Â ±ÔÄ¢¼ºÀÇ ÀüºÎ¸¦ ÀÚ¿¬ÀûÀÎ ÇüÅ·Π´Ù·ç±â¿¡´Â ¾î·Á¿òÀÌ ÀÖ´Ù .¿¹¸¦ µé¸é À§ÀÇ ¹®¹ýÀ» Á¤¹ÐÈ÷ ÇÏ¿© ¿µ¾î¿¡¼ÀÇ <ÁÖ¾î¿Í ¼ú¾îÀÇ ¼öÀÇ ÀÏÄ¡>¸¦ Á¶»çÇϵµ·Ï º¯°æÇϱâ À§Çؼ´Â ¸í»ç±¸ µ¿»ç±¸¸¦ ³ªÅ¸³»´Â ±âÈ£ NP, VP¸¦ ´Ü¼ö º¹¼öÀÇ ±¸º°À» Áö¿ì±â À§ÇØ °¢°¢ NPS (´Ü¼ö ¸í»ç±¸), NPP (º¹¼ö ¸í»ç±¸), VPS, VPP ¿Í °°ÀÌ ¼¼ºÐÈÇÏ¿© ±ÔÄ¢1 ÀÌ ³ª´µ¾î Áö°í ´Ù¸¥ ±ÔÄ¢µéµµ ±×¿¡ µû¶ó ¼¼ºÐÈ ½ÃÄÑ¾ß ÇÑ´Ù. ±ÔÄ¢À» Á¤¹ÐÈÇÔ¿¡ µû¶ó ÇÊ¿ä ±âÈ£ ¼ö¿Í ±ÔÄ¢ÀÌ Á¶ÇÕÀûÀ¸·Î Áõ´ëÇϰí ÀÚ¿¬¾î¿Í °°Àº º¹ÀâÇÑ ¹®¹ýÀ» ¾²´Â °ÍÀº °ÅÀÇ ºÒ°¡´É¿¡ °¡±î¿ö Áø´Ù.
¸®½ºÆ® ±¸Á¶
¸®½ºÆ® ±¸Á¶´Â ÀϹÝÀûÀÎ ±¸Á¶ÀÇ ÀÏÁ¾Àε¥ ¸ÕÀú ¸®½ºÆ® ±¸Á¶¸¦ »ìÆìº»´Ù¸éI LOVE Prolog À̰ÍÀ» ¸®½ºÆ®·Î ³ªÅ¸³»´Â ÇѰ¡Áö ¹æ¹ýÀº ['I'
'Love' 'Plorog'] °¡ µÈ´Ù. ÀÌ ¹®ÀåÀ» ¿µ¹®¹ý¿¡ µû¶ó¼ ºÐ¼®ÇÏ¸é ´ÙÀ½°ú °°Àºµ¥ À̰ÍÀ» ±¸¹® ºÐ¼®À̶ó°í ÇÑ´Ù. À̰ÍÀ» ¸®½ºÆ®·Î ³ªÅ¸³»¸é
[Subject('I'), verb('love'), object('Prolog')] ÀÌ´Ù. À̰ÍÀ» ÀϹÝÀûÀÎ ±¸Á¶·Î ³ªÅ¸³»¸é sentence (subject(noun('I')),
verb-phrase(verb(love), object(noun('Prolog')))) ÀÌ´Ù.
¸®½ºÆ® ±¸Á¶ÀÇ Á¤ÀÇ
¸®½ºÆ® ±¸Á¶´Â [¿ä¼Ò1¡¦..¿ä¼Òn]ÀÇ ¸ð¾çÀ» Çϰí ÀÖ´Ù. ¿©±â¼ ¿ä¼Ò i´Â »ó¼ö, º¯¼ö, ±¸Á¶
(¸®½ºÆ® ±¸Á¶µµ Æ÷ÇÔ) Áß ¾î¶² °ÍÀÌ¶óµµ »ó°ü
¾ø´Ù. ƯÈ÷ n = 0 ÀÏ ¶§´Â [ ] ·Î ³ªÅ¸³»´Âµ¥ À̰ÍÀ» °ø¹é ¸®½ºÆ®¶ó°íµµ ÇÑ´Ù. ÀÌ Á¤ÀÇ¿¡ ÀÇÇÏ¸é ´ÙÀ½Àº ¸ðµÎ ¸®½ºÆ® ±¸Á¶°¡ µÈ´Ù.
[ ]
[a], [A], [ __ ]
[a, b], [A, B], ,a, A, __ ] [[X, a], [Y, b], [Z, c]]
(a) [ H | T ] (b) [ H, I | T ] (c) [ H, I, J | T ] H H I H I J (d) [ [H] | T] (e) [ H | R ]| T ] (f) [[H | X], I | T] |
<¸®½ºÆ® 1> |
<¸®½ºÆ® 2> |
<½Ç·ÊÈ> |
[X, Y, Z]
[cat]
[X, Y|Z]
[ [the, Y]| Z]
[white | Q]
|
[john, likes, fish]
[X/Y]
[mary, likes, wine]
[[X, hare], [is, here]]
[P | horse]
|
X = john Y = likes Z=fish
X=cat Y=[ ]
X=mary Y=likes Z=[wine]
X=the Y=hare Z=[[is, here]]
P=white Q=horse |
ÀÌ·¯ÇÑ ¸®½ºÆ® ±¸Á¶·ÎºÎÅÍ ¾î¶² ¿ä¼Ò i ¸¦ ²¨³»°Å³ª »õ·Î¿î ¿ä¼Ò¸¦ »ðÀÔÇϱâ À§Çؼ ÆÐÅÏÀÏÄ¡¸¦ »ç¿ëÇϴµ¥ ¿©±â¼´Â ÀÌ¿¡ ´ëÇÏ¿©
¾Ë¾Æº¸±â·Î ÇÑ´Ù.
¿ì¼± ¸®½ºÆ® ±¸Á¶¸¦ ±×¸²À¸·Î ³ªÅ¸³»´Â ¹æ¹ýÀ» ¾Ë¾Æº¸±â·Î ÇÏÀÚ.
(i) [a], [A], [pair (a, A)]
(ii) [a, b], [A, B], [pair (a, A), pair (b, B)]
(iii) [a, b, c], [A, B, C], [pair(a, A), pair(b, B), pair(c, C)]
À̰ÍÀ» ±×¸²À¸·Î ³ªÅ¸³»¸é ´ÙÀ½°ú °°´Ù.
(I) ¤Ñ [ ] ¤Ñ [ ] ¤Ñ [ ] |
±×·¯¸é ÀÌÁ¦ ¸®½ºÆ® ±¸Á¶ÀÇ ÀÏÄ¡¿¡ ´ëÇØ¼ ¾Ë¾Æº¸ÀÚ.
(a) [ a ] ¡Ö [ a ]
(b) [ a, b ] ¡Ö [ a, b ]
(c) [ A, a] ¡Ö [ c, D ], À̶§ A=c, D=a °¡ µÈ´Ù.
(d) [ A, [a, B], d ] ¡Ö [ p, [a, q], d] À̶§ A=p, B=q °¡ µÈ´Ù.
(e) [ a1, a2, ......a999] ¡Ö [A1, A2, ......A999] À̶§ Ai=ai °¡ µÈ´Ù.
¿ì¸®°¡ ÇÑ ¿µ¾î ¹®ÀåÀ» ÀÔ·ÂÇßÀ» ¶§, ÀÔ·ÂµÈ ¹®ÀåÀ» º¯È¯ÇÏ¿© ´Ù¸¥ ¹®ÀåÀ¸·Î ÀÀ´äÇÏ´Â PROLOG ÇÁ·Î±×·¥À» »ý°¢ÇØ º¸ÀÚ. ÀÔ·ÂµÈ ¸»¿¡ ´ëÇØ ÇÁ·Î±×·¡¸Ó¿¡°Ô ´Ù½Ã À̾߱âÇØ ÁÖ´Â ÀÌ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº ´ëȸ¦ ¸¸µé ¼ö ÀÖ´Ù.
ÇÁ·Î±×·¡¸Ó : you are a computer
PROLOG ½Ã½ºÅÛ : I am not a computer
ÇÁ·Î±×·¡¸Ó : do you speak french
PROLOG ½Ã½ºÅÛ : no I speak german
ÀÌ ´ëÈ´Â ¾î´À Á¤µµ ¹«¸®ÇÑ ¸éÀÌ ÀÖÁö¸¸ ¾ç½ÄÀ» °®Ãá ´ëÈó·³ º¸ÀδÙ. ´ÙÀ½ÀÇ ´Ü°è¸¦ µû¶ó°¡¸é ÀÌ ´ëÈ ºÎºÐÀ» »ý¼ºÇÏ´Â ÄÄÇ»ÅÍÇÁ·Î±×·¥À» ½±°Ô ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.
1. »ç¿ëÀÚ°¡ ŸÀÌÇÎÇÑ ¹®ÀåÀ» ÀÔ·ÂÇÑ´Ù.
2. ¹®Àå ³»ÀÇ °¢ you¸¦ I·Î ¹Ù²Û´Ù.
3. ¸¶Âù°¡Áö·Î, °¢ areÀ» am mot À¸·Î ¹Ù²Û´Ù.
4. french¸¦ germanÀ¸·Î ¹Ù²Û´Ù.
5. do¸¦ no·Î ¹Ù²Û´Ù.
¾ÕÀÇ ´ëÈ¿¡¼ ó·³ ÁÖÀÇ ±í°Ô ¼±ÅÃÇÑ ¹®Àåµé¿¡ ÀÌ ¹æ¹ýÀ» Àû¿ëÇϸé ÀÌ ¹æ¹ýÀº ¹®ÀåÀ» º¯È¯ÇÏ¿© ¾î´À Á¤µµ ¾ç½ÄÀ» °®Ãá ¹®ÀåÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ´ÙÀ½ÀÇ ¿¹Ã³·³ ¸ðµç ¹®Àå¿¡ ÀÌ ¹æ¹ýÀ» Àû¿ëÇÒ ¼ö´Â ¾ø´Ù.
ÇÁ·Î±×·¡¸Ó : I do like you
PROLOG ½Ã½ºÅÛ : I no like
ÇÏÁö¸¸ ¿ì¼± ´Ü¼øÇÑ ¹®Àå¿¡ ´ëÇÑ º¯È¯ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í ³ ÈÄ ¿¹Ã³·³ ¼Åõ¸¥ Ãâ·ÂÀ» ³»º¸³»´Â ¹®ÀåÀ» ´Ù·ç±â À§ÇØ ³ªÁß¿¡ ÇÁ·Î±×·¥À» ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. ÇÑ ¹®ÀåÀ» ´Ù¸¥ ¹®ÀåÀ¸·Î º¯È¯ÇÏ´Â PROLOG ÇÁ·Î±×·¥Àº ¾Õ¿¡¼ ¼³¸íÇÑ ¹æ¹ýÀ» ÀÌ¿ëÇÏ¿© ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ù° ¿ì¸®´Â ¿ø·¡ÀÇ ¹®Àå°ú º¯È¯µÈ ¹®Àå »çÀÌÀÇ °ü°è¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. ÀÌ °ü°è¸¦ ³ªÅ¸³»±â À§ÇØ alter ¶ó´Â PROLOG ¼ú¾î¸¦ Á¤ÀÇÇÏ¿© alter(X, Y) ´Â ¹®Àå X ¸¦ º¯È¯ÇÏ¿© ¹®Àå Y ·Î ¸¸µå´Â °ÍÀ» ÀǹÌÇϵµ·Ï ÇÑ´Ù. X ¿Í Y ´Â ¹®ÀåÀÇ °¢ ´Ü¾îµéÀ» ¿ø¼Ò·Î °®´Â ¸®½ºÆ®·Î »ý°¢ÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù. ÀÌ·¸°Ô ÇÏ¸é ¹®ÀåÀ» [this, is, a, scntrnce] ó·³ Ç¥½ÃÇÒ ¼ö ÀÖ´Ù. alter¸¦ Á¤ÀÇÇÑ ÈÄ ¿ì¸®´Â PROLOG ½Ã½ºÅÛ¿¡ ´ÙÀ½°ú °°Àº ÇüÅÂÀÇ Áú¹®À» ÇÒ ¼ö ÀÖ´Ù.
¢¡ ?¤Ñalter([do, you, know, french], X).
±×·¯¸é ÀÌ Áú¹®¿¡ PROLOG ½Ã½ºÅÛÀº ´ÙÀ½°ú °°ÀÌ ÀÀ´äÇÒ °ÍÀÌ´Ù.
¢¡ X=[no, I, know, german]
¿©±â¼ ÀÔ·Â ¹®Àå°ú Ãâ·Â ¹®ÀåÀ» ÀÏ»óÀûÀÎ ¹®Àå Ç¥Çö ¹æ½ÄÀ¸·Î ³ªÅ¸³»´Â °Í¿¡ ´ëÇØ ¾ÆÁ÷Àº »ý°¢ÇÏÁö ¸»ÀÚ. ÀÌ ±³ÀçÀÇ µÚ¿¡¼ ¿ì¸®´Â ±¸Á¶¸¦ ÆÇµ¶Çϱ⠽¬¿î ÇüÅ·ΠÀÔ·ÂÇϰųª ÀμâÇÏ´Â ¹æ¹ýµé¿¡ ´ëÇØ ´Ù·ê °ÍÀÌ´Ù. ÇöÀç´Â ´ÜÁö ÇÑ ¸®½ºÆ®¸¦ ´Ù¸¥ ¸®½ºÆ®·Î º¯È¯ÇÏ´Â °Í¸¸ »ý°¢Çϱâ·Î ÇÑ´Ù. alter°¡ ¸®½ºÆ®¸¦ Ãë±ÞÇϰí ÀÖÀ¸¹Ç·Î alter ¼ú¾îÀÇ Ã¹ ¹øÂ° »ç½ÇÀº ¼ú¾îÀÇ Àμö°¡ ºó ¸®½ºÆ®ÀÎ °æ¿ì¸¦ Ç¥ÇöÇÏ¿©¾ß ÇÑ´Ù.
Alter([ ], [ ]).
Áï, alter ¼ú¾î´Â À§ÀÇ »ç½Ç¿¡ ÀÇÇØ ºó ¸®½ºÆ®¸¦ ºó ¸®½ºÆ®·Î º¯È¯ÇÒ °ÍÀÌ´Ù. ÀÌó·³ alter ¼ú¾î°¡ ºó ¸®½ºÆ®¸¦ À§±ÞÇØ¾ß ÇÏ´Â ÀÌÀ¯´Â µÚ¿¡ ¼³¸íÇϰڴÙ. ´ÙÀ½À¸·Î alter ¼ú¾îÀÇ ÁÖÀÛ¾÷À» ¾Ë¾Æº¸¸é ´ÙÀ½°ú °°´Ù.
1. ÀÔ·Â ¸®½ºÆ®ÀÇ ¸Ó¸®¸¦ ´Ù¸¥ ´Ü¾î·Î º¯È¯Çϰí Ãâ·Â ¸®½ºÆ®ÀÇ ¸Ó¸®°¡ º¯È¯µÈ ´Ü¾î¸¦ ³ªÅ¸³»µµ·Ï ÇÑ´Ù.
2. ÀÔ·Â ¸®½ºÆ®ÀÇ ²¿¸®¸¦ alter¸¦ Àû¿ëÇÏ¿© º¯È¯ÇÏ°í º¯È¯µÈ ²¿¸®¸¦ Ãâ·Â ¸®½ºÆ®ÀÇ ²¿¸®·Î ÇÑ´Ù.
3. ¸¸ÀÏ ÀÔ·Â ¸®½ºÆ®ÀÇ ¸¶Áö¸·¿¡ µµ´ÞÇÏ¸é ´õ ÀÌ»ó Ãâ·ÂÇÒ °ÍÀÌ ¾øÀ¸¹Ç·Î ºó ¸®½ºÆ® ([ ])·Î Ãâ·Â ¸®½ºÆ®¸¦ ³¡³½´Ù.
À̰ÍÀ» PROLOG ¾ð¾î¿Í À¯»çÇÑ ¾ð¾î·Î ¹Ù²Ù¸é ¾Æ·¡¿Í °°´Ù.
¸Ó¸® H
¿Í ²¿¸® T ¸¦ °¡Áø ¸®½ºÆ®¸¦ º¯È¯ÇÏ¸é ¸Ó¸® X ¿Í ²¿¸® Y ¸¦ °¡Áø ¸®½ºÆ®¸¦ »ý¼ºÇϴµ¥ ¿©±â¼ X
´Â ´Ü¾î H ¸¦ º¯È¯ÇÑ °ÍÀÌ°í ¸®½ºÆ®
Y ´Â ¸®½ºÆ® T ¸¦ º¯È¯ÇÑ °ÍÀÌ´Ù.
ÀÌÁ¦ ¿ì¸®´Â ÇÑ ´Ü¾î¸¦ ´Ù¸¥ ´Ü¾î·Î º¯È¯ÇÏ´Â °ÍÀÌ ¹«¾ùÀ» ÀǹÌÇϴ°¡¸¦ ¸»ÇØ¾ß ÇÑ´Ù. À̰ÍÀº ´Ü¾î X
¸¦ ´Ü¾î Y ·Î º¯È¯ÇÏ´Â °ÍÀ»
Ç¥ÇöÇÏ´Â change(X, Y) »ç½ÇµéÀ» ÀúÀåÇϰí ÀÖ´Â µ¥ÀÌÅͺ£À̽º¸¦ À¯ÁöÇÏ¸é µÈ´Ù. µ¥ÀÌÅͺ£À̽ºÀÇ ¸¶Áö¸·¿¡´Â ÇÑ ´Ü¾î¸¦ ´Ù¸¥ ´Ü¾î·Î
º¯È¯ÇÒ ¼ö ¾øÀ» °æ¿ì ±× ÀÚ½ÅÀ¸·Î º¯È¯ÇÏ´Â »ç½ÇÀ» ³ªÅ¸³»´Â Àâ³¶ (catch_all) »ç½ÇÀÌ ÇÊ¿äÇÏ´Ù. Àâ³¶ »ç½ÇÀ» µÎ´Â ÀÌÀ¯´Â ÇÁ·Î±×·¥ÀÌ
¾î¶»°Ô µ¿ÀÛÇϴ°¡¸¦ ¾Ë°í ³ ÈÄ¿¡´Â ¸íÈ®ÇØÁú °ÅÀÌ´Ù. Àâ³¶ »ç½ÇÀº change(X, Y)
·Î ´Ü¾î X °¡ ±× ÀÚ½ÅÀ¸·Î º¯È¯µÈ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. À§¿¡¼ ¿°ÅÇÑ ´Ü¾îµéÀÇ º¯È¯À» ´Ù·ç´Â µ¥ÀÌÅͺ£À̽º´Â ´ÙÀ½°ú °°´Ù.
change(you, I)
change(are, [am, not]).
change(french, german).
change(do, no).
change(X, X). /* Àâ³¶ »ç½Ç */
¿©±â¼ "am not" ±¸¸¦ change »ç½ÇÀÇ ÇÑ Àμö¸¸À» Â÷ÁöÇϵµ·Ï ¸®½ºÆ®·Î Ãë±ÞÇßÀ½À» ÁÖÀÇÇ϶ó.
ÀÌÁ¦ ¸Ó¸® A ¿Í ²¿¸® B ¸¦ °¡Áø ¸®½ºÆ®¸¦ [A|B] ·Î Ç¥ÇöÇÏ´Â °ÍÀ» ¿°µÎ¿¡ µÎ°í À§¿¡¼ ±â¼úÇÑ alter ¼ú¾î¸¦ ´ÙÀ½°ú °°ÀÌ PROLOG ¾ð¾î·Î
ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.
alter([ ], [ ]).
alter([H|T], [X|Y] : - change(H, X), alter(T, Y).
ÀÌ ÇÁ·Î½ÃÁê¾îÀÇ Ã¹ ¹øÂ° ³í¸® ÀýÀº ÀÔ·Â ¸®½ºÆ®°¡ ºó ¸®½ºÆ®Àΰ¡¸¦ °Ë»çÇÏ´Â °ÍÀº ¹°·Ð ÀÔ·Â ¸®½ºÆ®ÀÇ ³¡¿¡ µµ´ÞÇß´ÂÁöÀÇ ¿©ºÎµµ °Ë»çÇÑ´Ù. ±× ÀÌÀ¯¸¦ ´ÙÀ½ÀÇ ¿¹·Î ¾Ë¾Æº¸ÀÚ.
?- alter([you, are, a, computer], Z).
ÀÌ Áú¹®Àº alter ÀÇ µÎ ¹øÂ° ³í¸® Àý°ú ºÎÇÕµÇ¾î º¯¼ö H ´Â you ¸¦ ³ªÅ¸³»°í T ´Â ¸®½ºÆ® [are, a, compute] ¸¦ ³ªÅ¸³½´Ù. ´ÙÀ½ changeP(you, ¼öÇàÀº º¯¼ö X °¡ ´Ü¾î 'I' ¸¦ ³ªÅ¸³»µµ·Ï ¸¸µç´Ù. µû¶ó¼ º¯¼ö X °¡ alter °í¿ïÀÇ Ãâ·Â ¸®½ºÆ®ÀÇ Ã¹ ¹øÂ° ´Ü¾î´Â 'I' °¡ µÈ´Ù. ´ÙÀ½ alter([are, a, computer], Y) °í¿ïÀÌ °°Àº ±ÔÄ¢À» »ç¿ëÇÏ¿© ´Ü¾î are ¸¦ ¸®½ºÆ® [am, not] À¸·Î ¹Ù²Ù°í alter([a, computer], Y) °í¿ïÀ» »ý¼ºÇÑ´Ù. ÀÌ °í¿ïÀ» ¼öÇàÇϸé change(a, X) ¿Í ºÎÇÕÀÌ µÇ´Â »ç½ÇµéÀ» µ¥ÀÌÅÍ º£À̽º¿¡¼ ã±â¸¸ 'a' ·Î ¹Ù²ï´Ù. ´ÙÀ½ °í¿ïÀº alter([computer], Y) ·Î ´Ù½Ã µÎ ¹øÂ° ³í¸® Àý°ú ºÎÇյǾî change(computer, X) °í¿ïÀ» ¼öÇàÇÑ´Ù. ÀÌ °í¿ïÀº Àü°ú ¸¶Âù°¡Áö·Î Àâ³¶ »ç½Ç°ú ºÎÇյǾî computer´Â ±× ÀÚ½ÅÀ¸·Î º¯È¯µÈ´Ù. ¸¶Ä§³» ¿©±â¼ alter([ ], Y) °í¿ïÀ» ¼öÇàÇϸé ù¹øÂ° ³í¸® Àý°ú ºÎÇյǾî Ãâ·Â ¸®½ºÆ®·Î ³»º¸³¾ ¹®ÀåÀÌ ³¡³µÀ½À» ¾Ë¸°´Ù. µû¶ó¼ PROLOG ½Ã½ºÅÛÀº ¿ø·¡ Áú¹®¿¡ ´ÙÀ½°ú °°ÀÌ ÀÀ´äÇÒ °ÍÀÌ´Ù.
Z=[I, [am, not], a, computer]
¿©±â¼ [am, not] ±¸´Â ¸®½ºÆ®¿¡ »ðÀÔµÈ ´ë·Î ³ªÅ¸³ª´Â °Í¿¡ ÁÖÀÇÇ϶ó.
alter([ ], [ ]) »ç½Ç°ú Àâ³¶ »ç½Ç change(X, X) ¸¦ ÷°¡ÇÏ´Â ÀÌÀ¯°¡ ÀÌÁ¦´Â ¸íÈ®ÇØÁú °ÍÀÌ´Ù. º¸Åë °æ°è Á¶°ÇÀ» °Ë»çÇØ¾ß ÇÒ Çʿ䰡 ÀÖÀ»
¶§ ÀÌ¿Í °°Àº »ç½ÇµéÀ» ÇÁ·Î±×·¥¿¡ ÷°¡ÇÑ´Ù. À§ÀÇ ¼³¸í¿¡¼ ÀԷ¸®½ºÆ®°¡ ºó ¸®½ºÆ®°¡ µÇ°Å³ª CHANGE »ç½ÇµéÀ» ¸ðµÎ ã¾Æº¸¾ÒÀ» ¶§
°æ°è Á¶°ÇÀÌ ¹ß»ýÇÑ´Ù´Â °ÍÀÌ ºÐ¸íÇÏ´Ù. ÀÌ µÎ °¡Áö °æ°è Á¶°ÇÀÌ ¹ß»ýÇßÀ» ¶§ ¾î¶² ÇൿÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù. ¿¹¿¡¼ ÀÔ·Â ¸®½ºÆ®°¡ ³¡³ª°Ô
Çϰí CHANGE »ç½ÇµéÀ» ¸ðµÎ ã°í ³ ÈÄ ¾î¶² ´Ü¾î°¡ ´Ù¸¥ ´Ü¾î·Î º¯È¯µÇÁö ¾ÊÀ¸¸é ´Ü¾î¸¦ ±× ÀÚ½ÅÀ¸·Î º¯È¯ÇÑ´Ù.
³»ÀåµÈ Ç¥ÁØ ¼ú¾î´Â Turbo PROLOG system ÀÚü¿¡ ³»ÀåµÇ¾î ÀÖ´Â ¼ú¾îµéÀÌ´Ù. ÀϹÝÀûÀ¸·Î À̵é Ç¥ÁØ ¼ú¾î´Â Åë»óÀÇ Turbo
PROLOG ÀÇ Àý·Î Ç¥ÇöÇÒ ¼ö ¾ø´Â ÇÔ¼öµé·Î ±¸¼ºµÈ´Ù. ±×¸®°í À̵éÀº ture ³ª false
¸¦ ´äÇÏ´Â ´ë½Å keyboard ÀÔ·ÂÀ̳ª ȸé Ç¥½Ã¸¦ À§ÇØ
»ç¿ëµÇ´Â °æ¿ì°¡ ÈçÈ÷ ÀÖ´Ù.
ÀÌ ÇÁ·Î±×·¥Àº Á¤½Åº´È¯ÀÚ°¡ Àǻ簡 ¾øÀ̵µ COMPUTER CRT ¸¦ ÀÌ¿ëÇØ¼ ¼·Î °£´ÜÇÑ ´ëȸ¦ ÁÖ°í¹ÞÀ» ¼ö ÀÖ´Â ÇÁ·Î±×·¥ÀÌ´Ù. ÄÄÇ»ÅÍ¿¡¼ HOW ARE YOU THIS BEAUTIFUL DAY? ÀÇ ³»¿ëÀ» Àǻ簡 ¹°¾î º¸µíÀÌ ÇÁ·Î±×·¥¿¡¼ ¾ð¾î°¡ ÀÚµ¿ »ý¼ºµÇ°í ȯÀÚ°¡ ÀÌ ³»¿ë¿¡ ÇØ´çÇÏ´Â ´ë´ä : I DON'T KNOW, I FEEL BAD.À» COMPUTER KEYBOARD ·Î TYPING Çϸé ÇÁ·Î±×·¥¿¡¼ TRANSE ¿Í FRONT TOKEN ÀÇ ±â´ÉÀ¸·Î ´ÙÀ½°ú °°Àº ¾ð¾î°¡ ÀÚµ¿ »ý¼ºµÇ¾î CRT¿¡ DISPLAY µÉ °ÍÀÌ´Ù. HOW DO YOU KNOW THAT? ±×·¯¸é ÀÌ¿Í °°Àº ±â´ÉÀÌ ¾î¶»°Ô µÇ´ÂÁö¸¦ ¾Ë¾Æº¸ÀÚ. ¿ì¼± ¿ì¸®°¡ »ç¿ëÇÏ´Â ¾ð¾îµµ ¾Ë°í º¸¸é DO YOU HAVE A BOOK? ÀÇ ´ë´äÀ¸·Î´Â YES, I HAVE A BOOK. ARE YOU A BOY? ÀÇ ´ë´äÀ¸·Î´Â YES, I AM A BOY. ¿Í °°ÀÌ µÉ °ÍÀÌ´Ù. Áï ¿ì¸®´Â Àǹ®¹®ÀÇ ÁÖ¾î¿Í µ¿»ç´Â ±àÁ¤¹®À¸·Î ´ë´äµÉ ¶§¿¡ YOU ¸¦ I ·Î ¹Ù²Ù°í µ¿»ç ARE ¸¦ AM À¸·Î ¹Ù²Û´Ù. ÀÌ·¯ÇÑ °ÍÀº TRANS ÀÇ ±â´ÉÀ» ÀÌ¿ëÇØ¼ ÀûÀýÇÑ ´Ü¾î¿¡ ´ëÀÀÇϰԲû ¹Ù²Ü ¼ö ÀÖ´Ù.
char *trans[ ] = {
"you", "Let's not talk about me.",
"think", "Why do you think that?",
"hate", "So you hate something - tell me more.",
±×¸®°í ¸ñÀû¾î´Â ±×´ë·Î ¹Ýº¹µÇ¾î ±àÁ¤¹®À¸·Î »ç¿ëµÈ´Ù. ÀÌ·± ¿ø¸®¸¦ ÄÄǪÅÍ¿¡ ÀÌ¿ëÇϱâ À§Çؼ ÇÑ ¹®ÀåÀ» HEAD
¿Í TAIL ·Î ³ª´« ÈÄ¿¡
int head=0;/* head of topics queue*/ int tail=0;
/* tail of topics queue */ ÇÁ·Î±×·¥Àº ȯÀÚ°¡ ÀÔ·ÂÇÑ ÀÀ´äÀ» ´Ü¼øÈ÷ RETURN
À» Ä¡°Å³ª ±æÀ̰¡ VERYSHORT °³ÀÇ #define SHORT 10
#define VERYSHORT 3 ¹®ÀÚº¸´Ù ªÀº ¹ÝÀÀÀ» ³ÖÀ¸¸é RESPOND( ) ÀÇ È£ÃâÇÔÀ¸·Î½á ÀÌÀüÀÇ ÁÖÁ¦·Î µ¹¾Æ°¡·Á°í ÇÑ´Ù.
if (strlen(s)<VERYSHORT && strcmp(s, "bye")) {
else{
if (!*response[res]) res=0;/* start over again */
printf("%s\n", response[res++]);
}
return;
}
TOPICS Å¥¿¡ ÁÖÁ¦°¡ ÀÖÀ¸¸é FIND_TOPIC( ) ´Â ÂüÀ» ¸®ÅÏÇϰí ÁÖÁ¦¸¦ ¹è¿ T¿¡ ³ÖÀ» °ÍÀÌ´Ù. ¸¸¾à ÀÌÀüÀÇ ÁÖÁ¦°¡ ¾øÀ¸¸é RESPOND( ) ´Â RESPONSE µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ Àü¿¡ ÀÖ´ø ¹ÝÀÀ (STOCK RESPONSE) À» ¼±ÅÃÇÑ´Ù. ȯÀÚ°¡ SHORT ¹®ÀÚ¼öº¸´Ù ´õ ±ä ¹ÝÀÀÀ» ³ÖÀ¸¸é RESPOND( ) ´Â ´ë´äÀ» TOPICS Å¥¿¡ ³õ´Â´Ù.
if (strlen(s)<VERYSHORT && strcmp(s, "bye")) {
if (find_topic(t)) {
printf("You just said : ");
printf("%s \n", t);
printf("tell me more.\n");
}
ÀÌ Ã¼Å©´Â Àǻ簡 ¸Å¿ì ªÀº ´ë´äÀ» ÁÖÁ¦·Î À߸øÇÏ´Â °ÍÀ» ¸·±â À§Çؼ ÇÊ¿äÇϸç RESPOND( ) ´Â TRANS µ¥ÀÌÅͺ£À̽º¿¡ ÀÖ´Â ¾î¶² ´Ü¾î¿¡ ´ëÇØ¼µµ ȯÀÚÀÇ ¹ÝÀÀÀ» ÀÚ¼¼È÷ Á¶»çÇÑ ÈÄ¿¡ RESPOND( ) °¡ Çϳª¸¦ ¹ß°ßÇϸé Àû´çÇÑ ¹ÝÀÀÀ» ¸¸µé°í ¹®ÀåÀÇ ³¡¿¡¼ ¾î¶² ´Ü¾îµµ µ¥ÀÌÅͺ£À̽º¿¡ ÀÖ´Â °Í°ú ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é ÀÇ»ç´Â ´Ü¼øÈ÷ TELL ME MORE ¶ó°í ¸»ÇÑ´Ù. ÇÔ¼ö respond( ) ´Â "my" ¸¦ "you" ÇÏ´Â °Íó·³ ¸î ´Ü¾îÀÇ ³»¿ëÀ» ¹Ù²Ù±â À§Çؼ trans µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÑ´Ù. ÇÁ·Î±×·¥ÀÌ trans µ¥ÀÌÅͺ£À̽º¿¡¼ ´Ü¾î¸¦ ãÁö ¸øÇϸé ÇöÀçÀÇ ´Ü¾î¸¦ ´Ü¼øÈ÷ ´Ù½Ã ÇÁ¸°Æ®ÇÑ´Ù. ȯÀÚ°¡ return À» Ä¡¸é respond( ) ´Â ¹ÝÀÀ µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ ÀÌ¹Ì ÀÖ´Â ¹ÝÀÀ (stock response) À» »ç¿ëÇÒ °ÍÀÌ´Ù. ÇÁ·Î±×·¥Àº get_token( ) ÇÔ¼öÀÇ ¾à°£ º¯ÇüµÈ ¹öÀüÀ» »ç¿ëÇÏ¿© ȯÀÚÀÇ ¹ÝÀÀÀ» ºÐ¼®ÇÑ´Ù.
get_token( );
loc=lookup(token);
if (loc!=-1) {
printf("%s\n", trans[loc+1]);
return;
}
} while(*token);
Áï ȯÀÚÀÇ ¹ÝÀÀÀ» ÀúÀåÇÒ Å¥¸¦ ¸¸µé°í TRANS µ¥ÀÌÅͺ£À̽º´Â Ű¿öµå¿Í ¹ÝÀÀÀ» °£Á÷ÇÒ °ÍÀÌ´Ù. Áï ÇÁ·Î±×·¥ÀÌ Å°¿öµå¸¦ ÀνÄÇÒ ¶§¸¶´Ù
Àû´çÇÑ ¹ÝÀÀÀ» ³ªÅ¸³¾ °ÍÀÌ´Ù. 2Â÷¿ø ¹®ÀÚ¹è¿ TOPICS ´Â ȯÀÚÀÇ ¹ÝÀÀ¿¡ ´ëÇÑ È¯ÇüÅ¥¸¦ À¯ÁöÇϰí ÇÁ·Î±×·¥Àº TOPICS
¸¦ À妽º·Î Çϰí
Å¥¸¦ ¸¸µé±â À§Çؼ HEAD ¿Í TAIL º¯¼öµéÀ» »ç¿ëÇÑ´Ù. MAX ´Â Å¥¸¦ ¼³Á¤ÇÑ ÀÓÀÇÀÇ °ªÀ̸ç ÇÁ·Î±×·¥Àº ȯÀÚ°¡ ´äÀ» ³ÖÀ¸¸é ³ªÁß¿¡
ÇàÀ§ÀÇ ¾î¶² °úÁ¤ÀÌ ÃëÇØÁú °ÍÀÎÁö¸¦ °áÁ¤Çϱâ À§Çؼ SHORT ¿Í VERYSHORT ¸¦ »ç¿ëÇÑ´Ù. ÇÁ·Î±×·¥Àº ȯÀÚ°¡ ÀÔ·ÂÇÑ ÀÀ´äÀ» ´Ü¼øÈ÷
RETURN À» Ä¡°Å³ª ±æÀ̰¡ VERYSHORT °³ÀÇ ¹®ÀÚº¸´Ù ªÀº ¹ÝÀÀÀ» ³ÖÀ¸¸é REPOND( )
ÀÇ È£ÃâÇÔÀ¸·Î½á ÀÌÀüÀÇ ÁÖÁ¦·Î µ¹¾Æ°¡·Á°í
ÇÑ´Ù. TOPICS Å¥¿¡ ÁÖÁ¦°¡ ÀÖÀ¸¸é FIND_TOPIC( ) ´Â ÂüÀ» ¸®ÅÏÇϰí ÁÖÁ¦¸¦ ¹è¿ T
¿¡ ³ÖÀ» °ÍÀÌ´Ù. ¸¸¾à ÀÌÀüÀÇ ÁÖÁ¦°¡ ¾øÀ¸¸é
RESPOND( ) ´Â RESPONSE µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ Àü¿¡ ÀÖ´ø ¹ÝÀÀ(STOCK RESPONSE) À» ¼±ÅÃÇÑ´Ù.
ȯÀÚ°¡ SHORT ¹®ÀÚ¼öº¸´Ù ´õ ±ä ¹ÝÀÀÀ» ³ÖÀ¸¸é RESPOND( ) ´Â ´ë´äÀ» TOPICS Å¥¿¡ ³õ´Â´Ù. ÀÌ Ã¼Å©´Â Àǻ簡 ¸Å¿ì ªÀº ´ë´äÀ»
ÁÖÁ¦·Î À߸øÇÏ´Â °ÍÀ» ¸·±â À§Çؼ ÇÊ¿äÇϸç, RESPOND( ) ´Â TRANS µ¥ÀÌÅͺ£À̽º¿¡ ÀÖ´Â ¾î¶² ´Ü¾î¿¡ ´ëÇØ¼µµ ȯÀÚÀÇ ¹ÝÀÀÀ» ÀÚ¼¼È÷
Á¶»çÇÑ ÈÄ¿¡ RESPOND( ) °¡ Çϳª¸¦ ¹ß°ßÇϸé Àû´çÇÑ ¹ÝÀÀÀ» ¸¸µé°í ¹®ÀåÀÇ ³¡¿¡¼ ¾î¶² ´Ü¾îµµ µ¥ÀÌÅͺ£À̽º¿¡ ÀÖ´Â °Í°ú ÀÏÄ¡ÇÏÁö
¾ÊÀ¸¸é ÀÇ»ç´Â ´Ü¼øÈ÷ TELL ME MORE ¶ó°í ¸»ÇÑ´Ù. ÇÔ¼ö respond( ) ´Â "my"
¸¦ "your" ÇÏ´Â °Íó·³ ¸î ´Ü¾îÀÇ ³»¿ëÀ» ¹Ù²Ù±â À§Çؼ
trans µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÑ´Ù.
ÇÁ·Î±×·¥ÀÌ trans µ¥ÀÌÅͺ£À̽º¿¡¼ ´Ü¾î¸¦ ãÁö ¸øÇϸé ÇöÀçÀÇ ´Ü¾î¸¦ ´Ü¼øÈ÷ ´Ù½Ã ÇÁ¸°Æ® ÇÑ´Ù. ȯÀÚ°¡ return
À» Ä¡¸é respond( )´Â
¹ÝÀÀ µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ ÀÌ¹Ì ÀÖ´Â ¹ÝÀÀ (stock response) À» »ç¿ëÇÒ °ÍÀÌ´Ù. ÇÁ·Î±×·¥Àº get_token( )
ÇÔ¼öÀÇ ¾à°£ º¯ÇüµÈ ¹öÀüÀ»
»ç¿ëÇÏ¿© ȯÀÚÀÇ ¹ÝÀÀÀ» ºÐ¼®ÇÑ´Ù. Áï ȯÀÚÀÇ ¹ÝÀÀÀ» ÀúÀåÇÒ Å¥¸¦ ¸¸µé°í, TRANS µ¥ÀÌÅͺ£À̽º´Â Ű¿öµå¿Í ¹ÝÀÀÀ» °£Á÷ÇÒ °ÍÀÌ´Ù. Áï
ÇÁ·Î±×·¥ÀÌ Å°¿öµå¸¦ ÀνÄÇÒ ¶§¸¶´Ù Àû´çÇÑ ¹ÝÀÀÀ» ³ªÅ¸³¾ °ÍÀÌ´Ù. 2Â÷¿ø ¹®ÀÚ¹è¿ TOPICS
´Â ȯÀÚÀÇ ¹ÝÀÀ¿¡ ´ëÇÑ È¯ÇüÅ¥¸¦ À¯ÁöÇϰí
ÇÁ·Î±×·¥Àº TOPICS ¸¦ À妽º·Î Çϰí Å¥¸¦ ¸¸µé±â À§Çؼ HEAD ¿Í TAIL º¯¼öµéÀ» »ç¿ëÇÑ´Ù. MAX
´Â Å¥¸¦ ¼³Á¤ÇÑ ÀÓÀÇÀÇ °ªÀ̸ç
ÇÁ·Î±×·¥Àº ȯÀÚ°¡ ´äÀ» ³ÖÀ¸¸é ³ªÁß¿¡ ÇàÀ§ÀÇ ¾î¶² °úÁ¤ÀÌ ÃëÇØÁú °ÍÀÎÁö¸¦ °áÁ¤Çϱâ À§Çؼ SHORT
¿Í VERYSHORT ¸¦ »ç¿ëÇÑ´Ù.
½ÇÇà°á°ú
ÄÄÇ»ÅÍ ½ºÅ©¸° : HOW ARE YOU THIS BEAUTIFUL DAY?
»ç¿ëÀÚ : I DON'T KNOW. I FEEL BAD
ÄÄÇ»ÅÍ ½ºÅ©¸° : HOW DO YOU KNOW THAT?
»ç¿ëÀÚ : I FEEL LIKE I COULD KILL.
ÄÄÇ»ÅÍ ½ºÅ©¸° : IT IS WRONG TO KILL
»ç¿ëÀÚ : I NEVER SEEM TO WIN
ÀΰøÁö´É¾ð¾î¸¦ »ç¿ëÇÑ °æ¿ì
ȯÀÚ°¡ RESPONSEÇÑ ³»¿ë MY, YOUR ·Î Çϱâ À§Çؼ TRANSLATE
¸¦ »ç¿ëÇÑ´Ù.
ASSERT(translate("UNHAPPY", "WHY ARE YOU UNHAPPY?")),
ASSERT(translate("THINK", "WHY DO YOU THINK THAT?")),
ASSERT(translate("YOU", "LET'S NOT TALK ABOUT ME."))
¸¸ÀÏ RESPOND °¡ TRANSE µ¥ÀÌÅͺ£À̽º¿¡¼ ´Ü¾î¸¦ ¹ß°ßÇÏÁö ¸øÇϸé DOCTOR ´Â RESPONSE µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµÈ ÀÀ´äÀ» ÀÌ¿ëÇÏ¿© ȯÀÚ°¡ ÀÔ·ÂÇÑ ÀÀ´ä¿¡ ASSERT ÀÇ ±â´ÉÀ» ÀÌ¿ëÇÏ¿© µ¥ÀÌÅͺ£À̽ºÀÇ ¾ÕÀ̳ª µÚ¿¡ ÀýÀ» Ãß°¡½ÃŲ´Ù.
PATIENT(S) :-
ASSERT(patresponses(S)),
ASSERT(temp(S)),
PURGE :-
RETRACT(translate(_, _)),
FAIL.
ASSERTA(X) ¿Í ASSERTZ(X) ´Â ¶È°°ÀÌ µ¥ÀÌÅͺ£À̽º¿¡ ÀýÀ» Ãß°¡ÇÏÁö¸¸ ASSERTA(X)..... µ¥ÀÌÅͺ£À̽ºÀÇ Á¦ÀÏ ¾Õ¿¡ ÀýÀ» Ãß°¡Çϰí ASSERTZ(X)...... µ¥ÀÌÅͺ£À̽ºÀÇ Á¦ÀÏ µÚ¿¡ ÀýÀ» Ãß°¡Çϰí RETRACT(X)..... µ¥ÀÌÅͺ£À̽º¿¡¼ ºÒÇÊ¿äÇÑ ÀýµéÀ» Ãß°¡ÇÑ´Ù. ¶Ç ÇÁ·Î±×·¥Àº DOCTOR °¡ ȯÀÚÀÇ ÀÀ´äÀ» ó¸®ÇÒ ¼ö ÀÖÀ» ¶§±îÁö TEMP µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇÑ´Ù.
TEMP(S),
S=quit,
PURGE.
ȯÀÚ°¡ ´ÜÁö RETURN ۸¦ Ä£´Ù¸é DOCTOR ÀÇ Ã¹ ¹øÂ° ¶óÀÎÀº ¾ÕÀÇ ÁÖÁ¦¿¡ °üÇÑ ³»¿ëÀ¸·Î µ¹¾Æ°¡·Á°í ÇÑ´Ù. TOPICS µ¥ÀÌÅͺ£À̽º¿¡ ¾ÕÀÇ ÁÖÁ¦¿¡ °üÇÑ ³»¿ëÀÌ ¾ø´Ù¸é ÇÁ·Î±×·¥Àº RESPONSES µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµÈ ÀÀ´ä Áß¿¡¼ ÀûÇÕÇÑ °ÍÀ» ȯÀÚ°¡ ÇÑ ¹®ÀåÀ» ¼±ÅÃÇϸé RESPOND °¡ ½ÇÇàµÇ¸ç ½ÇÇà¿¡ ¼º°øÇϱâ À§Çؼ´Â ȯÀÚ°¡ ÀÔ·ÂÇÑ ¹®Àå¿¡¼ Ű¿öµå¸¦ ¹ß°ßÇØ¾ß ÇÑ´Ù. Ű¿öµå¸¦ ¹ß°ßÇϸé ÇÁ·Î±×·¥Àº Ű¿öµå¿Í ¿¬°áµÈ ÀÀ´äÀ» ÇÏ°í ¹ß°ßÇÏÁö ¸øÇϸé DOCTOR ÀÇ ¼¼ ¹øÂ° ÀýÀ» ÀÌ¿ëÇØ¼ ¹®Àå¿¡¼ ´ÙÀ½ Ű¿öµå¸¦ ãÀ¸·Á°í ÇÑ´Ù.
PARETRACT(topics(R)),
R<>"", WRITE("YOU JUST SAID", ""),
WRITE(R, ""), NL,
WRITE("TELL ME MORE..."), NL.
RESPOND("") :=FAIL.
RESPOND(S) :-
FRONTTOKEN(S, T, _),
TRANSLATE(T, T2),
WRITE(T2, " ").
RESPOND(S) :-
FRONTTOKEN(S, _, S2),
RESPOND(S2).TIENT(S) :-
¹®Àå ³¡¿¡ µµ´ÞÇÏ°íµµ Ű¿öµå¸¦ ãÁö ¸øÇÏ¸é ¼ú¾îÀüü´Â ½ÇÇà¿¡ ½ÇÆÐÇÑ´Ù. À̶§¿¡´Â DOCTOR ÀÇ ¸¶Áö¸· ÀýÀÌ ¼öÇàµÇ¸ç ¸¶Áö¸· ÀýÀº ù ¹øÂ° Àý°ú µ¿ÀÏÇÏ´Ù.
/* ELIZA Á¤½Åº´È¯ÀÚ Áø·á ÇÁ·Î±×·¥ */
/* ºñÀΰøÁö´É¾ð¾î TURBO C¸¦ »ç¿ëÇÑ ¿¹ */
/* Doctor #3 - optimistic and easily annoyed. */
#define MAX 100
#define SHORT 10
#define VERYSHORT 3
char *response[] = {
"How are you this beautiful day?",
"Did you have a happy childhood?",
"Did you hate your father?",
"I'm not sure I understand.",
""
};
char *trans[] = {
"you", "Let's not talk about me.",
"think", "Why do you think that?",
"hate", "So you hate something - tell me more.",
:what", "Why do you ask?",
"want", "Why do you want that?",
"need", "We all need many things - is this special?",
"why", "Remember, therapy is good for you.",
"know", "How do you know that?",
"bye", "Your bill will be mailed to you.",
"murder", "I don't like killing.",
"kill", "It is wrong to kill.",
"jerk", "Don't ever call me a jerk!",
"can't", "Don't be negative - be positive.",
"failure", "Strive for success.",
"never", "Don't be negative - be positive.",
"unhappy", "Why are you unhappy?",
""
};
char topics[MAX][80];/* holds old topics */
char token[80];
char *p_pos;
int res=0;/* index into response array */
int head=0;/* head of topics queue */
int tail=0;/* tail of topics queue */
main()
{
char s[80];
printf("%s\n", response[res++]);
do {
printf(" : ");
p_pos=s;
gets(s);
respond(s);
} while(strcmp(s, "bye"));
}
/* create the doctor's responses */
respond(s)
char *s;
{
char t[80];
int loc;
if (strlen(s) < VERYSHORT && strcmp(s, "bye")) {
if (find_topic(t)) {
printf("You just said :");
printf("%s \n", t);
printf("tell me more.\n");
}
else {
if (!*response[res]) res=0;/* start over again */
printf("%s\n", response[res++]);
}
return;
}
if (in_topics(s)) {
printf("Stop repeating yourself!\n");
return;
}
if (strlen(s) > SHORT) assert_topic(s);
do {
get_token();
loc=lookup(token);
if (loc!=-1) {
printf("%s\n", trans[loc+1]);
return;
}
} while(*token);
/* comment of last resort */
printf("Tell me more..., \n");
}
/* lookup a keyword in translation table */
lookup(token)
char *token;
{
int t;
t=0;
while(*trans[t]) {
if (!strcmp(trans[t], token)) return t;
t++;
}
return -1;
}
/* place a topic into the topics database */
assert_topic(t)
char *t;
{
if (head==MAX) head=0; /* wrap around */
strcpy(topics[head], t);
head++;
}
/* retrieve a topic */
find_topic(t)
char *t;
{
if (tail!=head) {
strcpy(t, topics[tail]);
tail++;
/* wrap around if necessary */
if (tail==MAX) tail=0;
return 1;
}
return 0;
}
/* see if in topics queue */
in_topics(s)
char *s;
{
int t;
for (t=0; t<MAX; t++)
if (!strcmp(s, topics[t])) return 1;
return 0;
}
/* return a token from the input stream */
get_token()
{
char *p;
p=token;
/* skip spaces */
while (*p_pos==' ') p_pos++;
if (*p_pos=='\0') { /* is end of input */
*p++='\0';
return;
}
if (is_in(*p_pos, ".!?")) {
*p=*p_pos;
p++, p_pos++;
*p='\0';
return;
}
/* read word until */
while(*p_pos!=' ' && !is_in(*p_pos, "., ;?!") && *p_pos) {
*p=tolower(*p_pos++);
p++;
}
*p='\0';
}
is_in(c, s)
char c, *s;
{
while(*s) {
if(c==*s) return 1;
s++;
}
return 0;
}
/* ELIZA Á¤½Åº´ È¥ÀÚ Áø·á ÇÁ·Î±×·¥ */
/* ÀΰøÁö´É¾ð¾î TURBO PROLOG¸¦ »ç¿ëÇÑ ¿¹ */
/* AN IMPROVED DOCTOR PROGRAM */
diagnostics
domains
list = symbol*
number = integer
database
RESPONSES(STRING)
TEMP(STRING)
TRANSLATE(SYMBOL, SYMBOL)
TOPICS(STRING)
PATRESPONSES(STRING)
PREDICATES
CONVERSE
PATIENT(STRING)
DOCTOR(STRING)
RESPOND(STRING)
purge
GOAL
makewindow(1, 7, 4, " ", 0, 0, 25, 80),
makewindow(2, 32, 7, " SPIDER", 0, 5, 10, 60),
makewindow(4, 16, 6, " S E P", 11, 0, 14, 40),
makewindow(5, 96, 1, " N C", 11, 41, 14, 38),
ASSERT(responses("HOW ARE YOU?")),
ASSERT(responses("CAN I HELP YOU?")),
ASSERT(responses("DO YOU HAVE SOME PROBLEMS?")),
ASSERT(responses("GO ON")),
ASSERT(responses("WHAT KIND OF PROBLEM DO YOU HAVE?")),
ASSERT(temp("")),
ASSERT(translate("UNHAPPY", "WHY ARE YOU UNHAPY?")),
ASSERT(translate("THINK", "WHY DO YOU THINK THAT?")),
ASSERT(translate("YOU", "LET'S NOT TALK ABOUT ME.")),
ASSERT(translate("IMPORTANT", "PLEASE TELL ME MORE.")),
ASSERT(translate("WHAT", "WHY DO YOU ASK?")),
ASSERT(translate("WANT", "WHAT WOULD YOU DO WITH IT?")),
ASSERT(translate("NEED", "OK TELL ME MORE.")),
ASSERT(translate("WHY", "REMEMBER, THIS IS THE ONLY ONE POLICY TO WIN THE WAR.")),
ASSERT(translate("KNOW", "YOU HAVE TO OBEY THE COMMANDER'S RULE")),
ASSERT(translate("ENEMY", "YOU ARE A GOOD COMMANDER.")),
ASSERT(translate("KILL", "THAT IS GOOD YOU HAVE TO KILL ENEMIES")),
ASSERT(translate("HURRY", "YOU HAVE TO HURRY!")),
ASSERT(translate("NEVER", "DON'T WORRY; GOD HELP US ALWAYS!")),
ASSERT(translate("FAILURE", "MAKE IT A SUCCESS")),
CONVERSE.
CLAUSES
CONVERSE :-
TEMP(S),
S=quip,
PURGE.
Converse :-
retract(temp(S)),
DOCTOR(S),
write(":"),
readln(P),
PATIENT(P),
converse.
DOCTOR("") :-
/** NO RESPONSE FROM PATIENT
CHECK PATIENT RESPONSE FILE **/
RETRACT(topics(R)),
R<>"",
WRITE("You Just Said", ""),
WRITE(R, ""), NL,
WRITE("TELL ME MORE .."), NL.
DOCTOR("") : -
/*NO RESPONSE FROM PATIENT */
RETRACT(responses(R)),
ASSERT(responses(R)),
WRITE(R), NL.
DOCTOR(S) :-
RESPOND(S),
ASSERT(topics(S)),
NL.
DOCTOR(_) :-
/* NO RESPONSE FROM PATIENT
CHECK PATIENT RESPONSE FILE */
RETRACT(topics(R)),
R<>"", WRITE("YOU JUST SAID", ""),
WRITE(R, ""), NL,
WRITE("TELL ME MORE..."), NL.
RESPOND("") :-FAIL.
RESPOND(S) :-
FRONTTOKEN(S, T, _),
TRANSLATE(T, T2),
WRITE(T2, " ").
RESPOND(S) :-
FRONTTOKEN(S, _, S2),
RESPOND(S2).
PATIENT(S) :-
PATRESPONSES(S),
WRITE("YOU ARE REPEATING YOURSELF."),
NL,
WRITE(":"),
readln(S2),
PATIENT(S2),
PATIENT(S) :-
PATRESPONSES(S),
WRITE("YOU ARE REPEATING YOURSELF."),
NL,
WRITE(":"),
readln(S2),
PATIENT(S2).
PATIENT(S) :-
ASSERT(patresponses(S)),
ASSERT(temp(S)).
PURGE :-
RETRACT(translate(_,_)),
FAIL.
PURGE :-
RETRACT(temp(_)), FAIL.
PURGE :-
retract(responses(_)), fail.
PURGE :-
RETRACT(topics(_)), FAIL.
PURGE :-
RETRACT(patresponses(_)), FAIL.
PURGE.
********************
PROGRAM OUTPUT
********************
HOW ARE YOU THIS BEAUTIFUL DAY?
: I DON'T KNOW, I FEEL BAD.
HOW DO YOU KNOW THAT?
: I FEEL LIKE I COULD KILL
IT IS WRONG TO KILL
: I NEVER SEEM TO WIN
DON'T BE NEGATIVE; THINK POSITIVE!
:WHY
REMEMBER, IT IS GOOD FOR YOU.
:WHY
YOU ARE REPEATING YOURSELF.
:HEY, WHO CARES JERK
DON'T YOU EVER CALL ME A JERK!
:I'LL CALL YOU A JERK ANY TIME I WANT TO
LET'S NOT TALK ABOUT ME.
:I AM UNHAPPY
WHY ARE YOU UNHAPPY?