Next: Impl of Scope, Previous: Scope, Up: Variable Scoping [Contents][Index]
¸³´ü´Ö¡ÊExtent¡Ë¤È¤Ï¡¢¥×¥í¥°¥é¥à¤Î¼Â¹ÔÃæ¤Ë¤ª¤¤¤Æ¡¢ ÊÑ¿ô̾¤¬Í¸ú¤Ç¤¢¤ë´ü´Ö¤ò»Ø¤·¤Þ¤¹¡£ Emacs Lisp¤Ç¤Ï¡¢Â«Çû¤òºî¤Ã¤¿¥Õ¥©¡¼¥à¤ò¼Â¹Ô¤·¤Æ¤¤¤ë´ü´ÖÃæ¤À¤±¡¢ ÊÑ¿ô¤Ï͸ú¤Ç¤¹¡£ ¤³¤ì¤òưŪ¸³´ü´Ö¡Êdynamic extent¡Ë¤È¸Æ¤Ó¤Þ¤¹¡£ C¤äPascal¤Ê¤É¤Î¤Û¤È¤ó¤É¤Î¸À¸ì¤Î¡Ø¥í¡¼¥«¥ë¡ÙÊÑ¿ô¤ä¡Ø¼«Æ°¡ÙÊÑ¿ô¤â ưŪ¸³´ü´Ö¤Ç¤¹¡£
ưŪ¸³´ü´Ö¤È¤ÏÊ̤Τâ¤Î¤Ë̵¸Â¤Î¸³´ü´Ö¡Êindefinite extent¡Ë¤¬¤¢¤ê¤Þ¤¹¡£ ¤Ä¤Þ¤ê¡¢ÊÑ¿ô«Çû¤Ï¡¢¤½¤Î«Çû¤òºî¤Ã¤¿¥Õ¥©¡¼¥à¤«¤éÈ´¤±¤Æ¤â¸³¤¹¤ë¤Î¤Ç¤¹¡£ ¤¿¤È¤¨¤Ð¡¢Common Lisp¤äScheme¤Ë¤Ï¤³¤ì¤¬¤¢¤ê¤Þ¤¹¤¬¡¢Emacs Lisp¤Ë¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¤³¤ì¤òÀâÌÀ¤¹¤ë¤¿¤á¤Ë¡¢¤Ä¤®¤Î´Ø¿ômake-add
¤ò¹Í¤¨¤Þ¤¹¡£
¤³¤Î´Ø¿ô¤Ï¡¢n¤Ë¼«¿È¤Î°ú¿ôm¤ò²Ã»»¤¹¤ë´Ø¿ô¤òÊÖ¤·¤Þ¤¹¡£
¤³¤Î´Ø¿ô¤ÏCommon Lisp¤Ç¤Ïưºî¤·¤Þ¤¹¤¬¡¢Emacs Lisp¤Ç¤Ï¤À¤á¤Ç¤¹¡£
¤È¤¤¤¦¤Î¤Ï¡¢make-add
¤Î¸Æ¤Ó½Ð¤·¤òÈ´¤±¤ë¤È¡¢
ÊÑ¿ôn¤Ï¼Â°ú¿ô2¤Ë«Çû¤µ¤ì¤Ê¤¯¤Ê¤ë¤«¤é¤Ç¤¹¡£
(defun make-add (n) (function (lambda (m) (+ n m)))) ; ´Ø¿ô¤òÊÖ¤¹ ⇒ make-add (fset 'add2 (make-add 2)) ; ´Ø¿ôadd2
¤ò ;(make-add 2)
¤ò»È¤Ã¤ÆÄêµÁ¤¹¤ë ⇒ (lambda (m) (+ n m)) (add2 4) ; 4¤Ë2¤ò²Ã»»¤·¤Æ¤ß¤ë error→ Symbol's value as variable is void: n
Lisp¤ÎÊý¸À¤Î¤¤¤¯¤Ä¤«¤Ë¤Ï¡Ø¥¯¥í¡¼¥¸¥ã¡Ù¡Êclosure¡Ë¤¬¤¢¤ê¤Þ¤¹¡£ ¤½¤ì¤Ï´Ø¿ô¤Î¤è¤¦¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¤¬¡¢ÄɲäÎÊÑ¿ô«Çû¤òµÏ¿¤·¤Þ¤¹¡£ Emacs Lisp¤Ë¤Ï¥¯¥í¡¼¥¸¥ã¤Ï¤¢¤ê¤Þ¤»¤ó¡£