Previous: Eval During Expansion, Up: Problems with Macros   [Contents][Index]


12.6.4 ¥Þ¥¯¥í¤Ï²¿²óŸ³«¤µ¤ì¤ë¤«

´Ø¿ô¤ò²ò¼á¼Â¹Ô¤·¤Æ¤¤¤ë¤È¤­¤Ë¤Ï¡¢¥Þ¥¯¥í¸Æ¤Ó½Ð¤·¤òɾ²Á¤¹¤ë¤¿¤Ó¤ËŸ³«¤·¤Þ¤¹¤¬¡¢ ¥³¥ó¥Ñ¥¤¥ë¤·¤¿´Ø¿ô¤Ç¤Ï¡¢¡Ê¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¡Ë1²ó¤À¤±Å¸³«¤·¤Þ¤¹¡£ ¤³¤Î°ã¤¤¤¬ÌäÂê¤Ë¤Ê¤ë¤³¤È¤â¤¢¤ê¤Þ¤¹¡£ ¥Þ¥¯¥íÄêµÁ¤ËÉûºîÍѤ¬¤¢¤ë¤È¡¢ ¥Þ¥¯¥í¤ò²¿²óŸ³«¤·¤¿¤«¤Ë°Í¸¤·¤ÆÆ°ºî¤¬°Û¤Ê¤ê¤Þ¤¹¡£

¤·¤¿¤¬¤Ã¤Æ¡¢¥Þ¥¯¥íŸ³«¤Î·×»»¤Ç¤Ï¡¢ ËÜÅö¤Ë¤Ê¤Ë¤ò¤·¤Æ¤¤¤ë¤Î¤«Íý²ò¤·¤Æ¤¤¤Ê¤¤¸Â¤ê¡¢ÉûºîÍѤÏÈò¤±¤Æ¤¯¤À¤µ¤¤¡£

ÆÃÊ̤ʼïÎà¤ÎÉûºîÍѤÎ1¤Ä¡¢¤Ä¤Þ¤ê¡¢ Lisp¥ª¥Ö¥¸¥§¥¯¥È¤ò¹½ÃÛ¤¹¤ë¤³¤È¤Ï²óÈò¤Ç¤­¤Þ¤»¤ó¡£ ¤Û¤È¤ó¤É¤¹¤Ù¤Æ¤Î¥Þ¥¯¥íŸ³«¤Ç¤Ï¡¢¥ê¥¹¥È¤ò¹½ÃÛ¤·¡¢ ¤½¤ì¤¬¥Þ¥¯¥í¤Î½ÅÍפÊÅÀ¤Ç¤â¤¢¤ê¤Þ¤¹¡£ ¤³¤ì¤Ï¡¢Ä̾°ÂÁ´¤Ç¤¹¤¬¡¢ 1¤Ä¤À¤±Ãí°Õ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ÆÉ¼Ô¤¬¹½ÃÛ¤·¤¿¥ª¥Ö¥¸¥§¥¯¥È¤¬¡¢ ¥Þ¥¯¥íŸ³«·Á¤ÎÃæ¤Î¥¯¥©¡¼¥È¤·¤¿Äê¿ô¤Î°ìÉô¤Ç¤¢¤ë¤È¤­¤Ç¤¹¡£

¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥Þ¥¯¥í¤ò1²ó¤À¤±Å¸³«¤¹¤ë¤È¡¢ ¥³¥ó¥Ñ¥¤¥ëÃæ¤Ë¤Ï¥ª¥Ö¥¸¥§¥¯¥È¤Ï°ìÅÙ¤À¤±ºî¤é¤ì¤Þ¤¹¡£ ¤·¤«¤·¡¢²ò¼á¼Â¹ÔÃæ¤Ë¤Ï¡¢¥Þ¥¯¥í¸Æ¤Ó½Ð¤·¤ò¹Ô¤¦¤¿¤Ó¤Ë¥Þ¥¯¥í¤òŸ³«¤¹¤ë¤Î¤Ç¡¢ ¤½¤Î¤¿¤Ó¤Ë¿·¤¿¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤¬ºîÀ®¤µ¤ì¤¿¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£

¸«Ä̤·¤Î¤è¤¤¤Û¤È¤ó¤É¤ÎLisp¥³¡¼¥É¤Ç¤Ï¡¢¤³¤Î°ã¤¤¤Ï´Ø·¸¤¢¤ê¤Þ¤»¤ó¡£ ¥Þ¥¯¥íÄêµÁ¤Ç¹½ÃÛ¤·¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ËÉûºîÍѤΤ¢¤ëÁàºî¤ò¹Ô¤¦¤È °ã¤¤¤¬½Ð¤Æ¤­¤Þ¤¹¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢ÌäÂê¤ò²óÈò¤¹¤ë¤Ë¤Ï¡¢ ¥Þ¥¯¥íÄêµÁ¤Ç¹½ÃÛ¤·¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ËÉûºîÍѤΤ¢¤ëÁàºî¤Ï¹Ô¤ï¤Ê¤¤ ¤È¤¤¤¦¤³¤È¤Ç¤¹¡£ ¤½¤Î¤è¤¦¤ÊÉûºîÍѤ¬¤É¤Î¤è¤¦¤ËÌäÂê¤ò°ú¤­µ¯¤³¤¹¤Î¤«¡¢Îã¤ò¤¢¤²¤Þ¤·¤ç¤¦¡£

(defmacro empty-object ()
  (list 'quote (cons nil nil)))
(defun initialize (condition)
  (let ((object (empty-object)))
    (if condition
        (setcar object condition))
    object))

initialize¤ò²ò¼á¼Â¹Ô¤·¤Æ¤¤¤ë¤È¤­¤Ë¤Ï¡¢ initialize¤ò¸Æ¤Ó½Ð¤¹¤¿¤Ó¤Ë¿·¤¿¤Ê¥ê¥¹¥È(nil)¤¬ºî¤é¤ì¤Þ¤¹¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢2¤Ä¤Î¸Æ¤Ó½Ð¤·¤Î¤¢¤¤¤À¤ÇÉûºîÍѤ¬»Ä¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£ initialize¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤¢¤ë¤È¡¢ ¥Þ¥¯¥íempty-object¤Ï¥³¥ó¥Ñ¥¤¥ë»þ¤ËŸ³«¤µ¤ì¡¢ 1¤Ä¤Î¡ØÄê¿ô¡Ù(nil)¤òºî¤ê¤Þ¤¹¤¬¡¢ ¤³¤ì¤Ï¡¢initialize¤ò¸Æ¤Ó½Ð¤¹¤¿¤Ó¤Ë¡¢ ºÆÍøÍѤµ¤ìÊѹ¹¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£

¤³¤Î¤è¤¦¤ÊÉÂŪ¤Ê¾ìÌ̤ò²óÈò¤¹¤ë1¤Ä¤ÎÊýË¡¤Ï¡¢ empty-object¤ò¡¢¥á¥â¥ê³ä¤êÉÕ¤±¤Ç¤Ï¤Ê¤¯¡¢ ¤¢¤ë¼ï¤ÎÄê¿ô¤È¹Í¤¨¤ë¤³¤È¤Ç¤¹¡£ '(nil)¤Î¤è¤¦¤ÊÄê¿ô¤Ësetcar¤Ï»È¤ï¤Ê¤¤¤Ç¤·¤ç¤¦¤«¤é¡¢ (empty-object)¤â¼«Á³¤Ë¤½¤Î¤è¤¦¤Ë»È¤ï¤Ê¤¤¤Ç¤·¤ç¤¦¡£