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
¤Î¤«¤ï¤ê¤Ë
Ÿ³«·ÁÆâÉô¤Ç»È¤¤¤Þ¤¹¡£