Next: , Previous: Sequencing, Up: Control Structures   [Contents][Index]


9.2 ¾ò·ïÉÕ¤­¼Â¹Ô

¾ò·ïÉÕ¤­À©¸æ¹½Â¤¤Ï¡¢ÁªÂò»è¤òÁª¤Ó¤Þ¤¹¡£ Emacs Lisp¤Ë¤Ï¡¢4¤Ä¤Î¾ò·ïÉÕ¤­¥Õ¥©¡¼¥à¤¬¤¢¤ê¤Þ¤¹¡£ ¾¤Î¸À¸ì¤Î¤â¤Î¤È¤Û¤È¤ó¤ÉƱ¤¸if¡¢ if¤ÎÊÑ·Á¤Ç¤¢¤ëwhen¤äunless¡¢ °ìÈ̲½¤·¤¿caseʸ¤Ç¤¢¤ëcond¤Ç¤¹¡£

Special Form: if condition then-form else-forms…

if¤Ï¡¢condition¤ò¤â¤È¤Ë¤·¤Æ¡¢ then-form¤«else-forms¤òÁª¤Ö¡£ condition¤¬nil°Ê³°¤Ëɾ²Á¤µ¤ì¤ë¤È¡¢ then-form¤òɾ²Á¤·¡¢¤½¤Î·ë²Ì¤òÊÖ¤¹¡£ ¤µ¤â¤Ê¤±¤ì¤Ð¡¢else-forms¤ò¥Æ¥­¥¹¥È¾å¤Î½ç¤Ëɾ²Á¤·¡¢ ¤½¤ÎºÇ¸å¤Î¤â¤Î¤ÎÃͤòÊÖ¤¹¡£ ¡Êif¤ÎelseÉôʬ¤Ï¡¢°ÅÌÛ¤Îprogn¤ÎÎã¤Ç¤¢¤ë¡£ see Sequencing¡£¡Ë

condition¤¬ÃÍnil¤Ç¤¢¤ê¡¢¤«¤Ä¡¢else-forms¤¬¤Ê¤¤¤È¡¢ if¤Ïnil¤òÊÖ¤¹¡£

if¤¬¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤Ç¤¢¤ë¤Î¤Ï¡¢ ÁªÂò¤·¤Ê¤«¤Ã¤¿Ê¬´ô¤ò¤±¤Ã¤·¤ÆÉ¾²Á¤·¤Ê¤¤¤«¤é¤Ç¤¢¤ë¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢¤Ä¤®¤ÎÎã¤Ç¤Ï¡¢ print¤Ï¤±¤Ã¤·¤Æ¸Æ¤Ð¤ì¤Ê¤¤¤¿¤átrue¤Ïɽ¼¨¤µ¤ì¤Ê¤¤¡£

(if nil 
    (print 'true) 
  'very-false)
⇒ very-false
Macro: when condition then-forms…

¤³¤ì¤Ïif¤ÎÊÑ·Á¤Ç¤¢¤ê¡¢else-forms¤¬¤Ê¤¯¡¢ then-forms¤ÏÊ£¿ô¤Î¥Õ¥©¡¼¥à¤Ç¤â¤è¤¤¡£ ÆÃ¤Ë¡¢

(when condition a b c)

¤Ï¡¢¤Ä¤®¤È¤Þ¤Ã¤¿¤¯Åù²Á¤Ç¤¢¤ë¡£

(if condition (progn a b c) nil)
Macro: unless condition forms…

¤³¤ì¤Ïthen-form¤¬¤Ê¤¤if¤ÎÊÑ·Á¤Ç¤¢¤ë¡£

(unless condition a b c)

¤Ï¡¢¤Ä¤®¤È¤Þ¤Ã¤¿¤¯Åù²Á¤Ç¤¢¤ë¡£

(if condition nil
   a b c)
Special Form: cond clause…

cond¤ÏǤ°Õ¸Ä¿ô¤ÎÁªÂò»è¤«¤é1¤Ä¤òÁª¤Ö¡£ cond¤Î³ÆÀáclause¤Ï¥ê¥¹¥È¤Ç¤¢¤ëɬÍפ¬¤¢¤ë¡£ ¤³¤Î¥ê¥¹¥È¤ÎCAR¤¬condition¡Ê¾ò·ï¡Ë¤Ç¤¢¤ë¡£ »Ä¤ê¤ÎÍ×ÁǤϡ¢¤¢¤ì¤Ð¡¢body-forms¡ÊËÜÂÎ¥Õ¥©¡¼¥à¡Ë¤Ç¤¢¤ë¡£ ¤Ä¤Þ¤ê¡¢³ÆÀá¤Ï¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ë¡£

(condition body-forms…)

cond¤Ï¡¢³ÆÀá¤Îcondition¤òɾ²Á¤·¤Æ¡¢ ³ÆÀá¤ò¥Æ¥­¥¹¥È¾å¤Î½ç¤Ë»î¤¹¡£ condition¤ÎÃͤ¬nil°Ê³°¤Ç¤¢¤ì¤Ð¡¢ ¤½¤ÎÀá¤Ï¡ØÀ®¸ù¡Ù¤¹¤ë¡£ ¤½¤¦¤¹¤ë¤È¡¢cond¤Ï¤½¤ÎÀá¤Îbody-forms¤òɾ²Á¤·¡¢ body-forms¤ÎºÇ¸å¤ÎÃͤ¬cond¤ÎÃͤȤʤ롣 »Ä¤ê¤ÎÀá¤Ï̵»ë¤¹¤ë¡£

condition¤ÎÃͤ¬nil¤Ç¤¢¤ë¤È¡¢ ¤½¤ÎÀá¤Ï¡Ø¼ºÇÔ¡Ù¤·¡¢ cond¤Ï¤Ä¤®¤ÎÀá¤Ø°Ü¤ê¤½¤Îcondition¤ò»î¤¹¡£

³Æcondition¤¬nil¤Ëɾ²Á¤µ¤ì¤ë¤È¡¢ ¤¹¤Ù¤Æ¤ÎÀ᤬¼ºÇÔ¤·¡¢cond¤Ïnil¤òÊÖ¤¹¡£

Àáclause¤Ï¡¢¤Ä¤®¤Î·Á¼°¤Ç¤â¤è¤¤¡£

(condition)

¤³¤Î¾ì¹ç¡¢condition¤¬nil°Ê³°¤Ç¤¢¤ë¤È¡¢ condition¤¬cond¥Õ¥©¡¼¥à¤ÎÃͤˤʤ롣

°Ê²¼¤ÎÎã¤Ë¤Ï4¤Ä¤ÎÀ᤬¤¢¤ê¡¢ x¤ÎÃͤ¬¡¢¿ô¡¢Ê¸»úÎ󡢥Хåե¡¡¢¥·¥ó¥Ü¥ë¤«¤É¤¦¤«Ä´¤Ù¤ë¡£

(cond ((numberp x) x)
      ((stringp x) x)
      ((bufferp x)
       (setq temporary-hack x) ; 1¤Ä¤ÎÀá¤Ë
       (buffer-name x))        ; Ê£¿ô¸Ä¤ÎËÜÂÎ¥Õ¥©¡¼¥à
      ((symbolp x) (symbol-value x)))

ºÇ¸å¤ÎÀá¤ò½ü¤¯¤½¤ì¤è¤ê¤Þ¤¨¤ÎÀ᤬¤É¤ì¤âÀ®¸ù¤·¤Ê¤¤¤È¤­¤Ë¤Ï¡¢ ºÇ¸å¤ÎÀá¤ò¼Â¹Ô¤·¤¿¤¤¤³¤È¤¬¤·¤Ð¤·¤Ð¤¢¤ë¡£ ¤³¤ì¤ò¹Ô¤¦¤Ë¤Ï¡¢(t body-forms)¤Î¤è¤¦¤Ë ºÇ¸å¤ÎÀá¤Îcondition¤Ët¤ò»È¤¦¡£ ¥Õ¥©¡¼¥àt¤Ït¤Èɾ²Á¤µ¤ì¡¢¤±¤Ã¤·¤Ænil¤Ç¤Ï¤Ê¤¤¡£ ¤½¤Î¤¿¤á¡¢cond¤¬¤³¤ÎÀá¤Ë㤷¤¿¤È¤­¤Ë¤Ï¡¢ ¤³¤ÎÀ᤬¼ºÇÔ¤¹¤ë¤³¤È¤Ï¤Ê¤¤¡£

¤¿¤È¤¨¤Ð¡¢¤Ä¤®¤Î¤È¤ª¤ê¡£

(cond ((eq a 'hack) 'foo)
      (t "default"))
⇒ "default"

¤³¤Î¼°¤Ï¡¢a¤ÎÃͤ¬hack¤Î¤È¤­¤Ë¤Ïfoo¤òÊÖ¤·¡¢ ¤µ¤â¤Ê¤±¤ì¤Ðʸ»úÎó"default"¤òÊÖ¤¹cond¤Ç¤¢¤ë¡£

Ǥ°Õ¤Î¾ò·ïÉÕ¤­¹½Â¤¤Ï¡¢cond¤äif¤Çɽ¸½¤Ç¤­¤Þ¤¹¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢¤É¤Á¤é¤ò»È¤¦¤«¤Ï¹¥¤ß¤ÎÌäÂê¤Ç¤¹¡£ ¤¿¤È¤¨¤Ð¡¢¤Ä¤®¤Î¤È¤ª¤ê¤Ç¤¹¡£

(if a b c)
≡
(cond (a b) (t c))