Previous: Quoting, Up: Evaluation   [Contents][Index]


8.4 ɾ²Á¡Êeval¡Ë

¤Û¤È¤ó¤É¤Î¾ì¹ç¡¢¼Â¹ÔÃæ¤Î¥×¥í¥°¥é¥à¤Ë¥Õ¥©¡¼¥à¤¬¸½¤ì¤ë¤È ¥Õ¥©¡¼¥à¤Ï¼«Æ°Åª¤Ëɾ²Á¤µ¤ì¤Þ¤¹¡£ µ©¤Ê¤³¤È¤Ç¤¹¤¬¡¢¼Â¹Ô»þ¤Ë·×»»¤·¤¿¥Õ¥©¡¼¥à¤òɾ²Á¤¹¤ë¤è¤¦¤Ë ¥³¡¼¥É¤ò½ñ¤¯É¬Íפ¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£ ¤¿¤È¤¨¤Ð¡¢ÊÔ½¸Ãæ¤Î¥Æ¥­¥¹¥È¤«¤é¥Õ¥©¡¼¥à¤òÆÉ¤ß¼è¤Ã¤¿¤ê¡¢ °À­¥ê¥¹¥È¤«¤é¥Õ¥©¡¼¥à¤ò¼è¤ê½Ð¤·¤¿¾ì¹ç¤Ê¤É¤Ç¤¹¡£ ¤³¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï¡¢´Ø¿ôeval¤ò»È¤¤¤Þ¤¹¡£

ËÜÀá¤ÇÀâÌÀ¤·¤¿´Ø¿ô¤äÊÑ¿ô¤Ï¡¢¥Õ¥©¡¼¥à¤òɾ²Á¤·¤¿¤ê¡¢ ɾ²Á½èÍý¤ËÀ©¸Â¤ò²Ý¤·¤¿¤ê¡¢ºÇ¸å¤ÎÌá¤êÃͤòµ­Ï¿¤·¤¿¤ê¤·¤Þ¤¹¡£ ¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¤·¤Æ¤âɾ²Á¤¬¹Ô¤ï¤ì¤Þ¤¹¡Êsee Loading¡Ë¡£

Ãí°Õ¡§ ¥Ç¡¼¥¿¹½Â¤¤ÎÃæ¤Ë´Ø¿ô¤ò³ÊǼ¤·¤Æ ¤½¤ì¤òfuncall¤äapply¤Ç¸Æ¤Ó½Ð¤¹¤Û¤¦¤¬¡¢ ¥Ç¡¼¥¿¹½Â¤¤ÎÃæ¤Ë¼°¤ò³ÊǼ¤·¤Æ¤½¤ì¤òɾ²Á¤¹¤ë¤è¤ê¡¢ °ìÈ̤ËÌÀ³Î¤Ç½ÀÆðÀ­¤¬¤¢¤ê¤Þ¤¹¡£ ´Ø¿ô¤ò»È¤¦¤È¤½¤ì¤é¤Ë°ú¿ô¤È¤·¤Æ¾ðÊó¤òÅϤ¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

Function: eval form

¤³¤Î´Ø¿ô¤Ï¡¢¼°¤òɾ²Á¤¹¤ë´ðËÜŪ¤Ê´Ø¿ô¤Ç¤¢¤ë¡£ form¤ò¸½ºß¤Î´Ä¶­¤Ë¤ª¤¤¤ÆÉ¾²Á¤·¡¢¤½¤Î·ë²Ì¤òÊÖ¤¹¡£ ɾ²Á½èÍý¤Ï¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ë°Í¸¤¹¤ë¡Êsee Forms¡Ë¡£

eval¤Ï´Ø¿ô¤Ê¤Î¤Ç¡¢eval¤Î¸Æ¤Ó½Ð¤·¤Ë¸½¤ì¤ë °ú¿ô¤Î¼°¤Ï2ÅÙɾ²Á¤µ¤ì¤ë¡£ eval¤ò¸Æ¤Ó½Ð¤¹¤Þ¤¨¤Î½àÈ÷¤Ç1²ó¡¢ ´Ø¿ôeval¼«¿È¤Ë¤è¤ëɾ²Á¤Ç¤â¤¦1²ó¤Ç¤¢¤ë¡£ Îã¤ò¼¨¤¹¡£

(setq foo 'bar)
     ⇒ bar
(setq bar 'baz)
     ⇒ baz
;; eval¤Ï°ú¿ôfoo¤ò¼õ¤±¼è¤ë
(eval 'foo)
     ⇒ bar
;; eval¤Ï°ú¿ôbar¤ò¼õ¤±¼è¤ë¡£¤½¤ì¤Ïfoo¤ÎÃÍ
(eval foo)
     ⇒ baz

eval¤Î¸Æ¤Ó½Ð¤·¤Î¿¼¤µ¤Ï¡¢ max-lisp-eval-depth¡Ê²¼µ­»²¾È¡Ë¤ËÀ©¸Â¤µ¤ì¤ë¡£

¥³¥Þ¥ó¥É: eval-region start end &optional stream read-function

¤³¤Î´Ø¿ô¤Ï¡¢¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Îstart¤Èend¤Ç»ØÄꤷ¤¿ ¥ê¡¼¥¸¥ç¥óÆâ¤Î¥Õ¥©¡¼¥à·²¤òɾ²Á¤¹¤ë¡£ ¥ê¡¼¥¸¥ç¥ó¤«¤é¥Õ¥©¡¼¥à¤òÆÉ¤ß¼è¤ê¡¢ ¤½¤ì¤é¤ËÂФ·¤Æeval¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤ò ¥ê¡¼¥¸¥ç¥ó¤ÎËöÈø¤Ë㤹¤ë¤Þ¤Ç¡¢¤¢¤ë¤¤¤Ï¡¢½èÍý¤µ¤ì¤Ê¤¤¥¨¥é¡¼¤¬ÄÌÃΤµ¤ì¤ë¤Þ¤Ç ·«¤êÊÖ¤¹¡£

stream¤¬nil°Ê³°¤Ê¤é¤Ð¡¢ ¥ê¡¼¥¸¥ç¥óÆâ¤Î¼°¤òɾ²Á¤·¤¿·ë²Ì¤ÎÃͤÏstream¤ò»È¤Ã¤ÆÉ½¼¨¤¹¤ë¡£ see Output Streams¡£

read-function¤¬nil°Ê³°¤Ë¤Ê¤é¤Ð¡¢ ¤½¤ì¤Ï´Ø¿ô¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¡¢ read¤Î¤«¤ï¤ê¤Ë¼°¤ò1¤Ä1¤ÄÆÉ¤à¤¿¤á¤Ë»È¤ï¤ì¤ë¡£ ¤³¤Î´Ø¿ô¤Ï¡¢ÆþÎÏÍѤΥ¹¥È¥ê¡¼¥à¤Ç¤¢¤ë1¤Ä¤Î°ú¿ô¤Ç¸Æ¤Ó½Ð¤µ¤ì¤ë¡£ ÊÑ¿ôload-read-function¡Êsee How Programs Do Loading¡Ë¤ò »È¤Ã¤Æ¤³¤Î´Ø¿ô¤ò»ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤ë¤¬¡¢ °ú¿ôread-function¤òÍѤ¤¤¿¤Û¤¦¤¬·øÏ´¤Ç¤¢¤ë¡£

eval-region¤Ï¤Ä¤Í¤Ënil¤òÊÖ¤¹¡£

¥³¥Þ¥ó¥É: eval-current-buffer &optional stream

¤³¤ì¤Ïeval-region¤ÈƱÍͤÀ¤¬¡¢¥Ð¥Ã¥Õ¥¡Á´ÂΤ˺îÍѤ¹¤ë¡£

Variable: max-lisp-eval-depth

¤³¤ÎÊÑ¿ô¤Ï¡¢ ¡Ê¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸"Lisp nesting exceeds max-lisp-eval-depth"¤Ç¡Ë ¥¨¥é¡¼¤òÄÌÃΤޤǤÎeval¡¢apply¡¢funcall¤Î¸Æ¤Ó½Ð¤·¤Î ºÇÂç¤Î¿¼¤µ¤òÀ©¸Â¤¹¤ë¡£ ¤³¤ÎÀ©¸Â¡¢¤ª¤è¤Ó¡¢¤³¤ì¤òͤ¨¤¿¤È¤­¤Î¥¨¥é¡¼¤Ï¡¢ ÉÔÀµ¤ËÄêµÁ¤µ¤ì¤¿´Ø¿ô¤Ë¤è¤Ã¤ÆLisp¤¬Ìµ¸Â¤ËºÆµ¢¤¹¤ë¤³¤È¤òËɻߤ¹¤ë 1¤Ä¤ÎÊýË¡¤Ç¤¢¤ë¡£

¿¼¤µÀ©¸Â¤Ï¡¢Lisp¥³¡¼¥É¤Ë¤è¤ëÌÀ¼¨Åª¤Ê¸Æ¤Ó½Ð¤·¤Ë²Ã¤¨¤Æ¡¢ Lisp¼°¤Ç½ñ¤«¤ì¤¿´Ø¿ô¤Î¸Æ¤Ó½Ð¤·¤ä´Ø¿ô¸Æ¤Ó½Ð¤·¤Î°ú¿ô¤ä´Ø¿ôËÜÂΤΥե©¡¼¥à¤Î ºÆµ¢Åª¤Êɾ²Á¤Ê¤É¤ÎÆâÉôŪ¤Êeval¡¢apply¡¢funcall¤Î ¸Æ¤Ó½Ð¤·¤â¿ô¤¨¤ë¡£

¤³¤ÎÊÑ¿ô¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤÏ300¡£ ¤³¤ì¤Ë100̤Ëþ¤ÎÃͤòÀßÄꤹ¤ë¤È¡¢»ØÄꤷ¤¿ÃͤË㤹¤ë¤ÈLisp¤Ï100¤ËÀßÄꤷľ¤¹¡£ Lisp¥Ç¥Ð¥Ã¥¬¤ËÆþ¤Ã¤¿¤È¤­¡¢ À©¸Â¤Ë¶á¤¤¾ì¹ç¤Ë¤Ï¥Ç¥Ð¥Ã¥¬¼«¿È¤¬¼Â¹Ô¤Ç¤­¤ë¤³¤È¤òÊݾڤ¹¤ë¤¿¤á¤ËÃͤòÁý¤ä¤¹¡£

max-specpdl-size¤Ï¡¢Æþ¤ì»Ò¤Î¿¼¤µ¤òÀ©¸Â¤¹¤ëÊ̤ÎÊýË¡¤Ç¤¢¤ë¡£ see Local Variables¡£

Variable: values

¤³¤ÎÊÑ¿ô¤ÎÃͤϡ¢ ¥Ð¥Ã¥Õ¥¡¤«¤é¼°¤òÆÉ¤ß¼è¤ê¡¢É¾²Á¤·¡¢·ë²Ì¤òɽ¼¨¤¹¤ëEmacs¤Îɸ½à¥³¥Þ¥ó¥É¤¬¹Ô¤Ã¤¿ ¤¹¤Ù¤Æ¤Î¼°¤ÎÌá¤êÃͤΥꥹ¥È¤Ç¤¢¤ë¡£ ¥ê¥¹¥È¤Î½ç½ø¤Ï¡¢ºÇ¿·¤Î¤â¤Î¤¬ºÇ½é¤Ë¤¯¤ë¡£

(setq x 1)
     ⇒ 1
(list 'A (1+ 2) auto-save-default)
     ⇒ (A 3 t)
values
     ⇒ ((A 3 t) 1 …)

¤³¤ÎÊÑ¿ô¤Ï¡¢ºÇ¶áɾ²Á¤·¤¿¥Õ¥©¡¼¥à¤ÎÃͤò»²¾È¤¹¤ë¤Î¤ËÊØÍø¤Ç¤¢¤ë¡£ values¤½¤Î¤â¤Î¤ÎÃͤÎɽ¼¨¤ÏÈó¾ï¤ËŤ¯¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ë¤Î¤Ç¡¢ ¤½¤ÎÃͤòɽ¼¨¤¹¤ë¤Î¤Ï¤è¤¯¤Ê¤¤¡£ ¤½¤Î¤«¤ï¤ê¤Ë¡¢¤Ä¤®¤Î¤è¤¦¤Ë¤·¤ÆÆÃÄê¤ÎÍ×ÁǤòÄ´¤Ù¤ë¡£

;; ¤â¤Ã¤È¤âºÇ¶á¤Îɾ²Á·ë²Ì¤ò»²¾È¤¹¤ë
(nth 0 values)
     ⇒ (A 3 t)
;; ¤³¤¦¤¹¤ë¤È¡¢¿·¤¿¤ÊÍ×ÁǤ¬Äɲ䵤졢
;;   ¤¹¤Ù¤Æ¤ÎÍ×ÁǤ¬1¤Ä¤¦¤·¤í¤Ø¤µ¤¬¤ë
(nth 1 values)
     ⇒ (A 3 t)
;; ¤³¤ÎÎã¤ò¼Â¹Ô¤¹¤ë¤Þ¤¨¤ÎºÇ¿·¤Î¤â¤Î¤Î¤Ä¤®¤ÎÍ×ÁǤò¼èÆÀ¤¹¤ë
(nth 3 values)
     ⇒ 1