Previous: Eval During Expansion, Up: Problems with Macros [Contents][Index]
´Ø¿ô¤ò²ò¼á¼Â¹Ô¤·¤Æ¤¤¤ë¤È¤¤Ë¤Ï¡¢¥Þ¥¯¥í¸Æ¤Ó½Ð¤·¤òɾ²Á¤¹¤ë¤¿¤Ó¤ËŸ³«¤·¤Þ¤¹¤¬¡¢ ¥³¥ó¥Ñ¥¤¥ë¤·¤¿´Ø¿ô¤Ç¤Ï¡¢¡Ê¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¡Ë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)
¤â¼«Á³¤Ë¤½¤Î¤è¤¦¤Ë»È¤ï¤Ê¤¤¤Ç¤·¤ç¤¦¡£