Next: Eval During Expansion, Previous: Argument Evaluation, Up: Problems with Macros [Contents][Index]
for¤Î¿·¤·¤¤ÄêµÁ¤Ë¤Ï¡¢¿·¤¿¤ÊÌäÂ꤬¤¢¤ê¤Þ¤¹¡£
¥æ¡¼¥¶¡¼¤¬Í½´ü¤·¤Æ¤¤¤Ê¤¤¥í¡¼¥«¥ëÊÑ¿ômax¤òƳÆþ¤·¤Æ¤¤¤ë¤Î¤Ç¤¹¡£
¤³¤ì¤Ï¡¢¤Ä¤®¤Î¤è¤¦¤Ê¾ì¹ç¡¢ÌäÂê¤ò°ú¤µ¯¤³¤·¤Þ¤¹¡£
(let ((max 0))
(for x from 0 to 10 do
(let ((this (frob x)))
(if (< max this)
(setq max this)))))
for¤ÎËÜÂÎÆâ¤Ç¤Îmax¤Î»²¾È¤Ï¡¢
¥æ¡¼¥¶¡¼¤¬Â«Çû¤·¤¿max¤ò»²¾È¤¹¤ë¤â¤Î¤È´üÂÔ¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢
¼ÂºÝ¤Ë¤Ïfor¤¬ºî¤Ã¤¿Â«Çû¤ò»È¤¤¤Þ¤¹¡£
¤³¤ì¤ò½¤Àµ¤¹¤ë¤Ë¤Ï¡¢max¤Î¤«¤ï¤ê¤Ë¡¢
¥¤¥ó¥¿¡¼¥ó¤·¤Æ¤Ê¤¤¥·¥ó¥Ü¥ë¡Êsee Creating Symbols¡Ë¤ò»È¤¤¤Þ¤¹¡£
¥¤¥ó¥¿¡¼¥ó¤·¤Æ¤Ê¤¤¥·¥ó¥Ü¥ë¤Ï¡¢Â¾¤Î¥·¥ó¥Ü¥ë¤ÈƱÍͤˡ¢
«Çû¤·¤¿¤ê»²¾È¤·¤¿¤ê¤Ç¤¤Þ¤¹¤¬¡¢for¤Çºî¤Ã¤¿¤Î¤Ç¡¢
¥æ¡¼¥¶¡¼¥×¥í¥°¥é¥à¤Ë¤Ï¸½¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤¬¤ï¤«¤Ã¤Æ¤¤¤Þ¤¹¡£
¥¤¥ó¥¿¡¼¥ó¤·¤Æ¤Ê¤¤¤Î¤Ç¡¢¥æ¡¼¥¶¡¼¤¬¥×¥í¥°¥é¥à¤Î¤¢¤È¤ÎÉôʬ¤Ç
»²¾È¤¹¤ëÊýË¡¤â¤¢¤ê¤Þ¤»¤ó¡£
for¤Ç»È¤Ã¤¿²Õ½ê°Ê³°¤Ë¤Ï¸½¤ì¤¨¤Ê¤¤¤Î¤Ç¤¹¡£
¤³¤Î¤è¤¦¤Ëưºî¤¹¤ëfor¤ÎÄêµÁ¤ò¤Ä¤®¤Ë¼¨¤·¤Þ¤¹¡£
(defmacro for (var from init to final do &rest body)
"Execute a simple for loop: (for i from 1 to 10 do (print i))."
(let ((tempvar (make-symbol "max")))
`(let ((,var ,init)
(,tempvar ,final))
(while (<= ,var ,tempvar)
,@body
(inc ,var)))))
¤³¤ì¤Ï¡¢max¤È¤¤¤¦Ì¾Á°¤Î¥¤¥ó¥¿¡¼¥ó¤·¤Æ¤Ê¤¤¥·¥ó¥Ü¥ë¤òºîÀ®¤·¡¢
¤â¤È¤Î¼°¤Ë¸½¤ì¤Æ¤¤¤¿¥¤¥ó¥¿¡¼¥ó¤·¤¿¥·¥ó¥Ü¥ëmax¤Î¤«¤ï¤ê¤Ë
Ÿ³«·ÁÆâÉô¤Ç»È¤¤¤Þ¤¹¡£