Next: , Previous: Simple Lambda, Up: Lambda Expressions   [Contents][Index]


11.2.3 °ú¿ô¥ê¥¹¥È¤Î¤½¤Î¾¤Îµ¡Ç½

ñ½ã¤Ê´Ø¿ô¤ÎÎã(lambda (a b c) (+ a b c))¤Ç¤Ï¡¢ 3¤Ä¤Î°ú¿ôÊÑ¿ô¤ò»ØÄꤷ¤Æ¤¤¤ë¤Î¤Ç¡¢¤³¤ì¤Ï3°ú¿ô¤Ç¸Æ¤Ó½Ð¤¹É¬Íפ¬¤¢¤ê¤Þ¤¹¡£ 2°ú¿ô¤ä4°ú¿ô¤Ç¸Æ¤Ó½Ð¤½¤¦¤È¤¹¤ë¤È¡¢ ¥¨¥é¡¼wrong-number-of-arguments¤Ë¤Ê¤ê¤Þ¤¹¡£

ÆÃÄê¤Î°ú¿ô¤ò¾Êά¤Ç¤­¤ë´Ø¿ô¤ò½ñ¤±¤ë¤ÈÊØÍø¤Ê¤³¤È¤¬¤·¤Ð¤·¤Ð¤¢¤ê¤Þ¤¹¡£ ¤¿¤È¤¨¤Ð¡¢´Ø¿ôsubstring¤Ï3¤Ä¤Î°ú¿ô¡¢¤Ä¤Þ¤ê¡¢ ʸ»úÎó¡¢³«»Ï¤È½ªÎ»¤Îź»ú¤ò¼è¤ê¤Þ¤¹¤¬¡¢ Âè3°ú¿ô¤ò¾Êά¤¹¤ë¤È¥Ç¥Õ¥©¥ë¥È¤Ïʸ»úÎó¤Îlength¤Ë¤Ê¤ê¤Þ¤¹¡£ list¤ä+¤Î¤è¤¦¤Ë¡¢ ÆÃÄê¤Î´Ø¿ô¤Ç¤ÏǤ°Õ¸Ä¿ô¤Î°ú¿ô¤ò¼õ¤±ÉÕ¤±¤ë¤ÈÊØÍø¤Ê¤³¤È¤â¤¢¤ê¤Þ¤¹¡£

´Ø¿ô¸Æ¤Ó½Ð¤·»þ¤Ë¾Êά¤·¤Æ¤â¤è¤¤°ú¿ô¤ò»ØÄꤹ¤ë¤Ë¤Ï¡¢ ¾Êά²Äǽ¤Ê°ú¿ô¤Î¤Þ¤¨¤Ë¥­¡¼¥ï¡¼¥É&optional¤ò´Þ¤á¤ë¤À¤±¤Ç¤¹¡£ 0¸Ä°Ê¾å¤Î°ú¿ô¤Î¥ê¥¹¥È¤ò»ØÄꤹ¤ë¤Ë¤Ï¡¢ ºÇ¸å¤Î°ú¿ô¤Î¤Þ¤¨¤Ë¥­¡¼¥ï¡¼¥É&rest¤ò´Þ¤á¤Þ¤¹¡£

¤·¤¿¤¬¤Ã¤Æ¡¢°ú¿ô¥ê¥¹¥È¤Î´°Á´¤Ê¹½Ê¸¤Ï¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

(required-vars…
               ; ɬ¿Ü¤Î°ú¿ô
 [&optional optional-vars]
               ; ¾Êά²Äǽ¤Ê°ú¿ô
 [&rest rest-var])
               ; »Ä¤ê¤Î°ú¿ô

³Ñ³ç¸Ì¤Ï¡¢&optional¤ä&rest¤ÎÀá¤ä ¤½¤ì¤Ë³¤¯ÊÑ¿ô¤Ï¾Êά¤Ç¤­¤ë¤³¤È¤ò¼¨¤·¤Þ¤¹¡£

´Ø¿ô¸Æ¤Ó½Ð¤·»þ¤Ë¤Ï¡¢³Ærequired-vars¤Ë1¤Ä¤Î¼Â°ú¿ô¤¬É¬ÍפǤ¹¡£ 0¸Ä°Ê¾å¤Îoptional-vars¤Ë¤â¼Â°ú¿ô¤¬É¬ÍפǤ¹¤¬¡¢ ¥é¥à¥À¥ê¥¹¥È¤Ë&rest¤¬¤Ê¤¤¸Â¤ê¡¢ optional-vars¤Î¸Ä¿ô¤òͤ¨¤ë¼Â°ú¿ô¤Ï»ØÄê¤Ç¤­¤Þ¤»¤ó¡£ &rest¤¬¤¢¤ì¤Ð¡¢Ç¤°Õ¸Ä¤Î;ʬ¤Ê¼Â°ú¿ô¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£

&optional¤ä&rest¤ËÂбþ¤¹¤ë¼Â°ú¿ô¤ò¾Êά¤¹¤ë¤È¡¢ ¤½¤ì¤é¤Î¥Ç¥Õ¥©¥ë¥È¤Ïnil¤Ç¤¹¡£ ´Ø¿ô¤Ç¤Ï¡¢nil¤òÌÀ¼¨¤·¤¿°ú¿ô¤È¾Êά¤·¤¿°ú¿ô¤È¤ò¶èÊ̤¹¤ëÊýË¡¤Ï¤¢¤ê¤Þ¤»¤ó¡£ ¤·¤«¤·¤Ê¤¬¤é¡¢´Ø¿ôËÜÂΤÇnil¤òŬÀڤʰÕÌ£¤¢¤ëÃͤξÊά¤È ¤ß¤Ê¤¹¤³¤È¤Ï¼«Í³¤Ç¤¹¡£ substring¤Ï¤½¤Î¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£ substring¤ÎÂè3°ú¿ô¤¬nil¤Ç¤¢¤ë¤È¡¢ »ØÄꤷ¤¿Ê¸»úÎó¤ÎŤµ¤ò»È¤¦¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£

Common Lisp¤Ë´Ø¤·¤¿Ãí°Õ¡§ Common Lisp¤Ç¤Ï¡¢¾Êά²Äǽ°ú¿ô¤ò¾Êά¤·¤¿¤È¤­¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤò´Ø¿ô¤Ç»ØÄê¤Ç¤­¤ë¡£ Emacs Lisp¤Ç¤Ï¤Ä¤Í¤Ënil¤ò»È¤¦¡£ Emacs Lisp¤Ë¤Ï¡¢ÌÀ¼¨Åª¤Ë°ú¿ô¤ò»ØÄꤷ¤¿¤«¤É¤¦¤«Ä´¤Ù¤ë ¡Øsupplied-p¡ÙÊÑ¿ô¤Ï¤Ê¤¤¡£

¤¿¤È¤¨¤Ð¡¢°ú¿ô¥ê¥¹¥È¤Ï¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

(a b &optional c d &rest e)

¤³¤ì¤Ï¡¢a¤Èb¤ËºÇ½é¤Î2¤Ä¤Î¼Â°ú¿ô¤ò«Çû¤·¡¢¤³¤ì¤é¤Ïɬ¿Ü¤Ç¤¹¡£ ¤µ¤é¤Ë1¸Ä¤«2¸Ä¤Î°ú¿ô¤ò»ØÄꤹ¤ë¤È¡¢ ¤½¤ì¤é¤Ï¡¢¤½¤ì¤¾¤ìc¤Èd¤Ë«Çû¤·¤Þ¤¹¡£ ºÇ½é¤Î4¸Ä¤è¤ê¤¢¤È¤Î°ú¿ô¤Ï¥ê¥¹¥È¤Ë¤Þ¤È¤á¡¢ e¤Ë¤½¤Î¥ê¥¹¥È¤ò«Çû¤·¤Þ¤¹¡£ °ú¿ô¤¬2¸Ä¤À¤±¤Ç¤¢¤ë¤È¡¢c¤Ïnil¤Ç¤¹¡£ °ú¿ô¤¬2¸Ä¤«3¸Ä¤À¤±¤Ç¤¢¤ë¤È¡¢d¤Ïnil¤Ç¤¹¡£ °ú¿ô¤¬4¸Ä°Ê²¼¤Ç¤¢¤ë¤È¡¢e¤Ïnil¤Ç¤¹¡£

¾Êά²Äǽ¤Ê°ú¿ô¤Î¤¢¤È¤Ëɬ¿Ü°ú¿ô¤ò»ØÄꤹ¤ëÊýË¡¤Ï¤¢¤ê¤Þ¤»¤ó¤·¡¢ ¤½¤ì¤Ë¤Ï°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó¡£ ¤Ê¤¼¤½¤¦¤Ê¤Î¤«¤òÍý²ò¤¹¤ë¤¿¤á¤Ë¡¢¾å¤ÎÎã¤Ç¡¢ c¤Ï¾Êά²Äǽ¤Ç¤¢¤ê¡¢d¤Ïɬ¿Ü¤Ç¤¢¤ë¤È¤·¤Þ¤·¤ç¤¦¡£ 3¤Ä¤Î¼Â°ú¿ô¤ò»ØÄꤷ¤¿¤È¤­¡¢¤É¤Î°ú¿ô¤ò3ÈÖÌܤȹͤ¨¤ë¤Î¤Ç¤·¤ç¤¦¡© ƱÍͤˡ¢&rest¤Î¤¦¤·¤í¤Ë;ʬ¤Ë¡Êɬ¿Ü¡¢¤â¤·¤¯¤Ï¾Êά²Äǽ¤Ê¡Ë°ú¿ô¤¬ ¤¢¤Ã¤Æ¤â°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó¡£

°ú¿ô¥ê¥¹¥È¤ÈÀµ¤·¤¤¸Æ¤Ó½Ð¤·¤ÎÎã¤ò¤¢¤²¤Þ¤¹¡£

((lambda (n) (1+ n))                ; 1¸Ä¤¬É¬¿Ü
 1)                                 ; °ú¿ô¤Ï1¸Ä¤À¤±
     ⇒ 2
((lambda (n &optional n1)           ; 1¸Ä¤Ïɬ¿Ü¡¢1¸Ä¤Ï¾Êά²Ä
         (if n1 (+ n n1) (1+ n)))   ; °ú¿ô¤Ï1¸Ä¤«2¸Ä
 1 2)
     ⇒ 3
((lambda (n &rest ns)               ; 1¸Ä¤Ïɬ¿Ü¡¢¤¢¤È¤Ï»Ä¤êÁ´Éô
         (+ n (apply '+ ns)))       ; °ú¿ô¤Ï1¸Ä°Ê¾å¤¤¤¯¤Ä¤Ç¤â¤è¤¤
 1 2 3 4 5)
     ⇒ 15