Next: Extent, Previous: Variable Scoping, Up: Variable Scoping [Contents][Index]
Emacs Lisp¤Ç¤Ï¡¢ ¥í¡¼¥«¥ëÊÑ¿ô«Çû¤Ï̵¸Â¤Î¥¹¥³¡¼¥×¡Êindefinite scope¡Ë¤Ç¤¹¡£ ¤Ä¤Þ¤ê¡¢¥×¥í¥°¥é¥à¥Æ¥¥¹¥È¾å¤Î¤É¤Î´Ø¿ô¤«¤é¤Ç¤â¡¢ ¤¢¤ëÊÑ¿ô«Çû¤ò»²¾È¤Ç¤¤ë¤Î¤Ç¤¹¡£ ¤Ä¤®¤Î´Ø¿ôÄêµÁ¤ò¹Í¤¨¤Æ¤ß¤Þ¤·¤ç¤¦¡£
(defun binder (x) ;x
¤Ï¡¢binder
¤Ç«Çû (foo 5)) ;foo
¤ÏÊ̤δؿô
(defun user () ; x
¤Ï¡¢user
¤Ë¤ª¤¤¤Æ¡Ø¼«Í³¡Ù
(list x))
¥Æ¥¥¹¥È¾å¤Î¥¹¥³¡¼¥×¤òÍѤ¤¤ë¸À¸ì¤Ç¤Ï¡¢
binder
Æâ¤Îx
¤Î«Çû¤ò¡¢user
¤Ç»²¾È¤¹¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£
¤Ê¤¼¤Ê¤é¡¢user
¤Ï¡¢¥Æ¥¥¹¥È¾å¤Ç´Ø¿ôbinder
¤ÎÆâ¦¤Ë¤Ï¤Ê¤¤¤«¤é¤Ç¤¹¡£
¤·¤«¤·¤Ê¤¬¤é¡¢Æ°Åª¥¹¥³¡¼¥×¤ÎEmacs Lisp¤Ç¤Ï¡¢
¾õ¶·¤Ë±þ¤¸¤Æ¡¢binder
Æâ¤Ç³ÎΩ¤·¤¿x
¤Î«Çû¤ò
user
¤«¤é»²¾È¤·¤Æ¤â¤·¤Ê¤¯¤Æ¤â¤è¤¤¤Î¤Ç¤¹¡£
binder
¤ò¤Þ¤Ã¤¿¤¯¸Æ¤Ó½Ð¤µ¤º¤Ë¡¢Ä¾ÀÜuser
¤ò¸Æ¤Ó½Ð¤·¤¿¤È¤¤Ë¤Ï¡¢
¤È¤Ë¤«¤¯¤ß¤Ä¤«¤Ã¤¿x
¤Î«Çû¤ò»È¤¦¤¬¡¢
¤½¤ì¤Ïbinder
¤Î¤â¤Î¤Ç¤Ï¤¢¤ê¤¨¤Ê¤¤¡£
foo
¤ò¤Ä¤®¤Î¤è¤¦¤ËÄêµÁ¤·¤Æbinder
¤ò¸Æ¤Ó½Ð¤·¤¿¤È¤¤Ë¤Ï¡¢
binder
¤¬ºî¤Ã¤¿Â«Çû¤òuser
¤Ç¸«¤¨¤ë¡£
(defun foo (lose) (user))
foo
¤ò¤Ä¤®¤Î¤è¤¦¤ËÄêµÁ¤·¤Æbinder
¤ò¸Æ¤Ó½Ð¤·¤¿¤È¤¤Ë¤Ï¡¢
binder
¤¬ºî¤Ã¤¿Â«Çû¤Ïuser
¤Ç¤Ï¸«¤¨¤Ê¤¤¡£
(defun foo (x) (user))
¤³¤³¤Ç¡¢binder
¤¬foo
¤ò¸Æ¤Ó½Ð¤¹¤È¡¢
foo
¤Ïx
¤ò«Çû¤¹¤ë¡£
¡Êfoo
¤Î«Çû¤Ïbinder
¤Î«Çû¤ò±£¤¹¡Êshadow¡Ë¤È¤¤¤¦¡£¡Ë
¤·¤¿¤¬¤Ã¤Æ¡¢user
¤Ï¡¢binder
¤Î«Çû¤Ç¤Ï¤Ê¤¯¡¢
foo
¤Î«Çû¤ò»²¾È¤¹¤ë¤³¤È¤Ë¤Ê¤ë¡£
Emacs Lisp¤ÇưŪ¥¹¥³¡¼¥×¤ò»È¤¦¤Î¤Ï¡¢ ¥Æ¥¥¹¥È¾å¤Î¥¹¥³¡¼¥×¤Îñ½ã¤Ê¼ÂÁõ¤ÏÃÙ¤¤¤«¤é¤Ç¤¹¡£ ¤µ¤é¤Ë¡¢¤¹¤Ù¤Æ¤ÎLisp¥·¥¹¥Æ¥à¤Ï¡¢¾¯¤Ê¤¯¤È¤â¥ª¥×¥·¥ç¥ó¤È¤·¤Æ¡¢ ưŪ¥¹¥³¡¼¥×¤ò»È¤¨¤ë¤è¤¦¤Ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¥Æ¥¥¹¥È¾å¤Î¥¹¥³¡¼¥×¤¬É¸½à¤Ç¤¢¤ë¤È¡¢ ÆÃÄê¤ÎÊÑ¿ô¤ËÂФ·¤ÆÆ°Åª¥¹¥³¡¼¥×¤ò»ØÄꤹ¤ëÊýË¡¤¬É¬Íפˤʤê¤Þ¤¹¡£ Emacs¤ÇξÊý¤Î¥¹¥³¡¼¥×¤ò»È¤¨¤ë¤è¤¦¤Ë¤·¤Æ¤â¤è¤¤¤Î¤Ç¤¹¤¬¡¢ ưŪ¥¹¥³¡¼¥×¤À¤±¤À¤È¼ÂÁõ¤¬¤è¤ê´Êñ¤Ë¤Ê¤ê¤Þ¤¹¡£