Next: Void Variables, Previous: Constant Variables, Up: Variables [Contents][Index]
¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤Ï¡¢ ÌÀ¼¨Åª¤Ë¿·¤·¤¤ÃͤÇÃÖ¤´¹¤¨¤Ê¤¤¸Â¤ê¸³¤¹¤ëÃͤò»ý¤Á¤Þ¤¹¡£ °ì»þŪ¤Ë¤·¤«Â¸ºß¤·¤Ê¤¤ÊÑ¿ôÃÍ¡¢ ¤Ä¤Þ¤ê¡¢¥×¥í¥°¥é¥à¤Î¤¢¤ëÉôʬ¤ò´°Î»¤¹¤ë¤Þ¤Ç¤Î¤ß¸ºß¤¹¤ëÊÑ¿ôÃͤò ºî¤ì¤ë¤ÈÊØÍø¤Ê¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ ¤³¤Î¤è¤¦¤ÊÃͤò¥í¡¼¥«¥ë¡Êlocal¡¢¶É½êŪ¡Ë¤È¸Æ¤Ó¡¢ ¤½¤Î¤è¤¦¤Ë»È¤ï¤ì¤ëÊÑ¿ô¤ò¥í¡¼¥«¥ëÊÑ¿ô¡Êlocal variables¡Ë¤È¸Æ¤Ó¤Þ¤¹¡£
¤¿¤È¤¨¤Ð¡¢´Ø¿ô¤ò¸Æ¤Ó½Ð¤·¤¿¤È¤¡¢¤½¤Î°ú¿ôÊÑ¿ô¤Ï¡¢
´Ø¿ô¤òÈ´¤±¤ë¤Þ¤Ç¸³¤¹¤ë¿·¤¿¤Ê¥í¡¼¥«¥ë¤ÊÃͤò¼õ¤±¼è¤ê¤Þ¤¹¡£
¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥àlet
¤Ï¡¢»ØÄꤷ¤¿ÊÑ¿ô¤Î¿·¤¿¤Ê¥í¡¼¥«¥ëÃͤò
ÌÀ¼¨Åª¤Ë³ÎΩ¤·¤Þ¤¹¡£
¤³¤ì¤é¤Ï¥Õ¥©¡¼¥àlet
¤òÈ´¤±¤ë¤Þ¤Ç¸³¤·¤Þ¤¹¡£
¥í¡¼¥«¥ëÃͤò³ÎΩ¤¹¤ë¤È¡¢ ÊÑ¿ô¤Î°ÊÁ°¤ÎÃ͡ʤ¢¤ë¤¤¤ÏÃͤ¬¤Ê¤¤¤³¤È¡Ë¤òÊݸ¤·¤Þ¤¹¡£ ¥í¡¼¥«¥ëÃͤθ³´ü´Ö¤¬½ªÎ»¤¹¤ë¤È¡¢°ÊÁ°¤ÎÃͤòÉü¸µ¤·¤Þ¤¹¡£ ¤³¤Î´ü´Ö¤Ï¡¢°ÊÁ°¤ÎÃͤò±£¤·¤Æ¡Êshadowed¡Ë¤¤¤Æ °ÊÁ°¤ÎÃͤϸ«¤¨¤Þ¤»¤ó¡£ ¥°¥í¡¼¥Ð¥ëÃͤǤâ¥í¡¼¥«¥ëÃͤǤⱣ¤»¤Þ¤¹¡Êsee Scope¡Ë¡£
ÊÑ¿ô¤¬¥í¡¼¥«¥ë¤Ê¤È¤¤Ë¡Êsetq
¤Ê¤É¤Ç¡Ë¤½¤ÎÊÑ¿ô¤òÀßÄꤹ¤ë¤È¡¢
¥í¡¼¥«¥ëÃͤòÃÖ¤´¹¤¨¤Þ¤¹¡£
±£¤µ¤ì¤Æ¤¤¤ë¥°¥í¡¼¥Ð¥ëÃͤä°ÊÁ°¤Î¥í¡¼¥«¥ëÃͤòÊѹ¹¤·¤Þ¤»¤ó¡£
¤³¤Î¤Õ¤ë¤Þ¤¤¤ò¥â¥Ç¥ë²½¤¹¤ë¤¿¤á¤Ë¡¢
ÊÑ¿ô¤Î¥í¡¼¥«¥ëÃͤ˲䨤ÆÊÑ¿ô¤Î¥í¡¼¥«¥ë«Çû¡Êlocal binding¡Ë¤ò
¹Í¤¨¤Þ¤¹¡£
¥í¡¼¥«¥ë«Çû¤È¤Ï¡¢¥í¡¼¥«¥ëÃͤòÊÝ»ý¤¹¤ë³µÇ°Åª¤Ê¾ì½ê¤Ç¤¹¡£
´Ø¿ô¤älet
¤Ê¤É¤Î¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤ËÆþ¤ë¤¿¤Ó¤Ë
¥í¡¼¥«¥ë«Çû¤òºîÀ®¤·¤Þ¤¹¡£
´Ø¿ô¤ä¥Õ¥©¡¼¥àlet
¤«¤éÈ´¤±¤ë¤È¥í¡¼¥«¥ë«Çû¤òºï½ü¤·¤Þ¤¹¡£
¥í¡¼¥«¥ë«Çû¤¬Â¸Â³¤¹¤ë¸Â¤ê¡¢ÊÑ¿ô¤ÎÃͤϤ½¤³¤ËÊÝ»ý¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¥í¡¼¥«¥ë«Çû¤¬Â¸ºß¤¹¤ë¤È¤¤Ësetq
¤äset
¤ò»È¤¦¤È¡¢
¥í¡¼¥«¥ë«Çû¤ÎÃæ¤ËÊ̤ÎÃͤò³ÊǼ¤·¤Þ¤¹¡£
¿·¤¿¤Ê«Çû¤òºî¤ë¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¥°¥í¡¼¥Ð¥ëÃͤòÊÝ»ý¤¹¤ë³µÇ°Åª¤Ê¾ì½ê¤ò ¥°¥í¡¼¥Ð¥ë«Çû¡Êglobal binding¡Ë¤È¤â¤¤¤¤¤Þ¤¹¡£
ÊÑ¿ô¤Ë¤Ï°ìÅÙ¤ËÊ£¿ô¤Î¥í¡¼¥«¥ë«Çû¤¬¤¢¤ê¤¨¤Þ¤¹
¡Ê¤¿¤È¤¨¤Ð¡¢Æ±¤¸ÊÑ¿ô¤ò«Çû¤¹¤ëÆþ¤ì»Ò¤Ë¤Ê¤Ã¤¿¥Õ¥©¡¼¥àlet
¤¬¤¢¤ë¤È¤¡Ë¡£
¤½¤Î¤è¤¦¤Ê¾ì¹ç¡¢´û¸¤Î¤â¤Ã¤È¤âºÇ¶á¤ËºîÀ®¤µ¤ì¤¿¥í¡¼¥«¥ë«Çû¤¬¡¢
ÊÑ¿ô¤Î¸½ºß¤Î«Çû¡Êcurrent binding¡Ë¤Ç¤¹¡£
¡Ê¤³¤Îµ¬Â§¤òưŪ¥¹¥³¡¼¥×¡Êdynamic scoping¡Ë¤È¸Æ¤Ó¤Þ¤¹¡£
see Variable Scoping¡Ë
¥í¡¼¥«¥ë«Çû¤¬¤Þ¤Ã¤¿¤¯¤Ê¤±¤ì¤Ð¡¢ÊÑ¿ô¤Î¥°¥í¡¼¥Ð¥ë«Çû¤¬¸½ºß¤Î«Çû¤Ç¤¹¡£
¸½ºß¤Î«Çû¤Î¤³¤È¤ò¶¯Ä´¤·¤Æ´û¸¤ÎºÇ¥í¡¼¥«¥ë«Çû¤È¸Æ¤Ö¤³¤È¤â¤¢¤ê¤Þ¤¹¡£
¥·¥ó¥Ü¥ë¤ÎÄ̾ï¤Îɾ²Á¤Ç¤Ï¡¢¤½¤Î¸½ºß¤Î«Çû¤ÎÃͤòÊÖ¤·¤Þ¤¹¡£
¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥àlet
¤älet*
¤Ï¡¢
¥í¡¼¥«¥ë«Çû¤òºî¤ë¤¿¤á¤Ë¤¢¤ê¤Þ¤¹¡£
¤³¤Î¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤Ï¡¢bindings¤Ë½¾¤Ã¤ÆÊÑ¿ô¤ò«Çû¤·¡¢
forms¤Î¤¹¤Ù¤Æ¤ò¥Æ¥¥¹¥È¾å¤Î½ç¤Ëɾ²Á¤¹¤ë¡£
let
¥Õ¥©¡¼¥à¤Ï¡¢forms¤ÎºÇ¸å¤Î¥Õ¥©¡¼¥à¤ÎÃͤòÊÖ¤¹¡£
bindings¤Î¤ª¤Î¤ª¤Î¤Ï¡¢(i)¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¤«¡¢
(ii)¥Õ¥©¡¼¥à(symbol value-form)
¤Î¥ê¥¹¥È¤Ç¤¢¤ë¡£
Á°¼Ô¤Ï¡¢¥·¥ó¥Ü¥ë¤Ënil
¤ò«Çû¤¹¤ë¡£
¸å¼Ô¤Ï¡¢symbol¤Ëvalue-form¤Îɾ²Á·ë²Ì¤ò«Çû¤¹¤ë¡£
value-form¤ò¾Êά¤¹¤ë¤Ènil
¤ò»È¤¦¡£
bindings¤Îvalue-form·²¤¹¤Ù¤Æ¤ò¸½¤ì¤ë½ç¤Ëɾ²Á¤·¤Æ¤«¤é¡¢
¥·¥ó¥Ü¥ë¤Ë¤½¤ì¤é¤ÎÃͤò«Çû¤¹¤ë¡£
Îã¤ò¤Ä¤®¤Ë¼¨¤¹¡£
Z
¤Ï¡¢Y
¤Î¸Å¤¤ÃÍ2¤Ë«Çû¤µ¤ì¡¢Y
¤Î¿·¤·¤¤ÃÍ1¤Ç¤Ï¤Ê¤¤¡£
(setq Y 2) ⇒ 2
(let ((Y 1) (Z Y)) (list Y Z)) ⇒ (1 2)
¤³¤Î¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤Ïlet
¤Ë»÷¤Æ¤¤¤ë¤¬¡¢
ÊÑ¿ô¤Î¥í¡¼¥«¥ëÃͤò·×»»¤·½ª¤¨¤¿Ä¾¸å¤Ë¤½¤ÎÊÑ¿ô¤ò«Çû¤·¡¢
¤Ä¤®¤ÎÊÑ¿ô¤Î¥í¡¼¥«¥ëÃͤη׻»¤Ë¿Ê¤à¡£
¤·¤¿¤¬¤Ã¤Æ¡¢bindingsÆâ¤Î¼°¤Ç¤Ï¡¢¤³¤Îlet*
¥Õ¥©¡¼¥àÆâ¤Ç
¤Þ¤¨¤Ë¤¢¤ë¥·¥ó¥Ü¥ë¤ò»²¾È¤Ç¤¤ë¡£
¤Ä¤®¤ÎÎã¤ò¾å¤Îlet
¤ÎÎã¤ÈÈæ³Ó¤·¤Æ¤Û¤·¤¤¡£
(setq Y 2) ⇒ 2
(let* ((Y 1)
(Z Y)) ; ÀßÄꤷ½ª¤¨¤¿¤Ð¤«¤ê¤ÎY
¤ÎÃͤò»È¤¦
(list Y Z))
⇒ (1 1)
°Ê²¼¤Ë¥í¡¼¥«¥ë«Çû¤òºîÀ®¤¹¤ë¤½¤Î¾¤Îµ¡Ç½¤Î´°Á´¤Ê°ìÍ÷¤ò¤¢¤²¤Æ¤ª¤¤Þ¤¹¡£
ÊÑ¿ô¤Ï¡¢¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤Ê«Çû¡Êsee Buffer-Local Variables¤ä ¥Õ¥ì¡¼¥à¥í¡¼¥«¥ë¤Ê«Çû¡Êsee Frame-Local Variables¡Ë¤ò»ý¤Ä¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ ¾¯¿ô¤ÎÊÑ¿ô¤Ï¡¢Ã¼Ëö¤Ë¥í¡¼¥«¥ë¤Ê«Çû¡Êsee Multiple Displays¡Ë ¤ò»ý¤Ä¤³¤È¤â¤Ç¤¤Þ¤¹¡£ ¤³¤Î¼ï¤Î«Çû¤ÏÉáÄÌ¤Î¥í¡¼¥«¥ë«Çû¤ÈƱ¤¸¤è¤¦¤ËƯ¤¤Þ¤¹¤¬¡¢ ¤³¤ì¤é¤ÏEmacs¤Î¡Ø¤É¤ÎÉôʬ¡Ù¤Ë¤¤¤ë¤«¤Ë°Í¸¤·¤¿¥í¡¼¥«¥ë²½¤Ç¤¢¤ê¡¢ »þ´ÖŪ¤Ê¥í¡¼¥«¥ë²½¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¤³¤ÎÊÑ¿ô¤Ï¡¢¡Ê"Variable binding depth exceeds max-specpdl-size"
¤ò
ȼ¤Ã¤¿¡Ë¥¨¥é¡¼¤òÄÌÃΤ¹¤ë¤Þ¤Ç¤Ëµö¤µ¤ì¤ë¡¢
¥í¡¼¥«¥ëÊÑ¿ô«Çû¤È
unwind-protect
¤Ë¤è¤ë¸å»ÏËö¡Êsee Nonlocal Exits¡Ë¤Î
Á´ÂΤθĿô¤ÎÀ©¸Â¤òÄêµÁ¤¹¤ë¡£
¤³¤ÎÀ©¸Â¡¢¤ª¤è¤Ó¡¢¤³¤ì¤òͤ¨¤¿¤È¤¤Î¥¨¥é¡¼¤Ï¡¢ ÉÔÀµ¤ËÄêµÁ¤µ¤ì¤¿´Ø¿ô¤Ë¤è¤Ã¤ÆLisp¤¬Ìµ¸Â¤ËºÆµ¢¤¹¤ë¤³¤È¤òËɻߤ¹¤ë 1¤Ä¤ÎÊýË¡¤Ç¤¢¤ë¡£
¥Ç¥Õ¥©¥ë¥ÈÃͤÏ600¤Ç¤¢¤ë¡£ Lisp¥Ç¥Ð¥Ã¥¬¤ËÆþ¤Ã¤¿¤È¤¡¢ À©¸Â¤Ë¶á¤¤¾ì¹ç¤Ë¤Ï¥Ç¥Ð¥Ã¥¬¼«¿È¤¬¼Â¹Ô¤Ç¤¤ë¤³¤È¤òÊݾڤ¹¤ë¤¿¤á¤ËÃͤòÁý¤ä¤¹¡£