Next: , Previous: Defining Functions, Up: Functions   [Contents][Index]


11.5 ´Ø¿ô¸Æ¤Ó½Ð¤·

´Ø¿ô¤òÄêµÁ¤¹¤ë¤³¤È¤Ï¡¢Á´ÂΤÎȾʬ¤Ç¤·¤«¤¢¤ê¤Þ¤»¤ó¡£ ´Ø¿ô¤ò¸Æ¤Ö¤Þ¤Ç¤Ï¡¢¤Ä¤Þ¤ê¡¢¼Â¹Ô¤òÌ¿¤¸¤Ê¤±¤ì¤Ð¡¢´Ø¿ô¤Ï¤Ê¤Ë¤â¤·¤Þ¤»¤ó¡£ ´Ø¿ô¸Æ¤Ó½Ð¤·¤Ïµ¯Æ°¡Êinvocation¡Ë¤È¤â¤¤¤¤¤Þ¤¹¡£

´Ø¿ô¤òµ¯Æ°¤¹¤ë¤â¤Ã¤È¤â°ìÈÌŪ¤ÊÊýË¡¤Ï¡¢¥ê¥¹¥È¤òɾ²Á¤¹¤ë¤³¤È¤Ç¤¹¡£ ¤¿¤È¤¨¤Ð¡¢¥ê¥¹¥È(concat "a" "b")¤òɾ²Á¤¹¤ë¤È¡¢ ´Ø¿ôconcat¤ò°ú¿ô"a"¤È"b"¤Ç¸Æ¤Ó½Ð¤·¤Þ¤¹¡£ ɾ²Á¤Ë¤Ä¤¤¤Æ¤ÏSee Evaluation¡£

ÆÉ¼Ô¤Î¥×¥í¥°¥é¥à¤Ç¼°¤È¤·¤Æ¥ê¥¹¥È¤ò½ñ¤¯¤È¤­¤Ë¤Ï¡¢ ¸Æ¤Ó½Ð¤¹´Ø¿ô̾¤òÆÉ¼Ô¤Î¥×¥í¥°¥é¥à¤Ë½ñ¤­¤Þ¤¹¡£ ¤Ä¤Þ¤ê¡¢¥×¥í¥°¥é¥à¤ò½ñ¤¯¤È¤­¤Ë¡¢ ¤É¤Î´Ø¿ô¤ò¤É¤ì¤À¤±¤Î°ú¿ô¤Ç¸Æ¤Ó½Ð¤¹¤«¤ò»ØÄê¤Ç¤­¤ë¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£ ¤³¤ì¤¬¡¢ÉáÄ̤ˤ·¤¿¤¤¤³¤È¤Ç¤·¤ç¤¦¡£ ¸Æ¤Ó½Ð¤¹´Ø¿ô¤ò¼Â¹Ô»þ¤Ë·×»»¤¹¤ëɬÍפ¬¤¢¤ë¾ì¹ç¤â¤¢¤ë¤Ç¤·¤ç¤¦¡£ ¤½¤ì¤Ë¤Ï¡¢´Ø¿ôfuncall¤ò»È¤¤¤Þ¤¹¡£ ÅϤ¹°ú¿ô¤Î¸Ä¿ô¤ò¼Â¹Ô»þ¤Ë·èÄꤹ¤ëɬÍפ¬¤¢¤ë¤È¤­¤Ë¤Ï¡¢ apply¤ò»È¤¤¤Þ¤¹¡£

Function: funcall function &rest arguments

funcall¤Ï¡¢function¤òarguments¤Ç¸Æ¤Ó½Ð¤·¡¢ function¤¬¤Ê¤Ë¤òÊÖ¤½¤¦¤È¤â¤½¤ì¤òÊÖ¤¹¡£

funcall¤Ï´Ø¿ô¤Ê¤Î¤Ç¡¢function¤Î¸Æ¤Ó½Ð¤·¤òɾ²Á¤¹¤ë¤Þ¤¨¤Ë function¤ò´Þ¤á¤¿°ú¿ô¤¹¤Ù¤Æ¤òɾ²Á¤¹¤ë¡£ ¤Ä¤Þ¤ê¡¢¸Æ¤Ó½Ð¤¹´Ø¿ô¤òÆÀ¤ë¤¿¤á¤Î¤É¤ó¤Ê¼°¤Ç¤â»È¤¨¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£ ¤Þ¤¿¡¢funcall¤Ï¡¢ÆÉ¼Ô¤¬arguments¤Ë½ñ¤¤¤¿¼°¤ò¸«¤ë¤³¤È¤Ï¤Ê¤¯¡¢ ¤½¤ì¤é¤ÎÃͤÀ¤±¤ò¸«¤ë¤³¤È¤Ë¤Ê¤ë¡£ ¤³¤ì¤é¤ÎÃͤϡ¢function¤ò¸Æ¤Ó½Ð¤¹Áàºî¤Ë¤ª¤¤¤Æ¡¢ 2²óÌܤÎɾ²Á¤ò¹Ô¤¦¤³¤È¤Ï¤Ê¤¤¡£ funcall¤Ï¡¢Ä̾ï¤Î´Ø¿ô¸Æ¤Ó½Ð¤·½èÍý¤Ë¤ª¤¤¤Æ¡¢ °ú¿ô¤òɾ²Á¤·½ª¤¨¤¿¤È¤³¤í¤«¤é»Ï¤á¤ë¡£

°ú¿ôfunction¤Ï¡¢Lisp´Ø¿ô¤«´ðËÜ´Ø¿ô¤Ç¤¢¤ëɬÍפ¬¤¢¤ë¡£ ¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤ä¥Þ¥¯¥í¤Ïµö¤µ¤ì¤Ê¤¤¡£ ¤½¤ì¤é¤Ë¤Ï¡¢¡ØÌ¤É¾²Á¡Ù¤Î°ú¿ô¼°¤òÍ¿¤¨¤¿¤È¤­¤À¤±°ÕÌ£¤¬¤¢¤ë¤«¤é¤Ç¤¢¤ë¡£ funcall¤Ç¤Ï¤½¤Î¤è¤¦¤Ë¤Ç¤­¤Ê¤¤¡£ ¤Ê¤¼¤Ê¤é¡¢¾å¤ÎÀâÌÀ¤Ç¤ï¤«¤ë¤è¤¦¤Ë¡¢ ̤ɾ²Á¤Î°ú¿ô¤ò¤Þ¤Ã¤¿¤¯ÃΤé¤Ê¤¤¤«¤é¤Ç¤¢¤ë¡£

(setq f 'list)
     ⇒ list
(funcall f 'x 'y 'z)
     ⇒ (x y z)
(funcall f 'x 'y '(z))
     ⇒ (x y (z))
(funcall 'and t nil)
error→ Invalid function: #<subr and>

¤³¤ì¤é¤ÎÎã¤òapply¤ÎÎã¤ÈÈæ³Ó¤·¤Æ¤Û¤·¤¤¡£

Function: apply function &rest arguments

apply¤Ï¡¢funcall¤Î¤è¤¦¤Ë¡¢ function¤òarguments¤Ç¸Æ¤Ó½Ð¤¹¤¬¡¢1ÅÀ¤À¤±°Û¤Ê¤ë¡£ arguments¤ÎºÇ¸å¤Ï¥ª¥Ö¥¸¥§¥¯¥È¤Î¥ê¥¹¥È¤Ç¤¢¤ê¡¢ function¤Ë¤Ï¤³¤ì¤ò¡¢Ã±°ì¤Î¥ê¥¹¥È¤Ç¤Ï¤Ê¤¯¡¢¸Ä¡¹¤Î°ú¿ô¤È¤·¤ÆÅϤ¹¡£ ¤³¤ì¤ò¡¢apply¤Ï¡¢ ¤³¤Î¥ê¥¹¥È¤Î¸Ä¡¹¤ÎÍ×ÁǤ¬°ú¿ô¤È¤Ê¤ë¤è¤¦¤ËʬÇÛ¤¹¤ë¤È¤¤¤¦¡£

apply¤Ï¡¢function¤Î¸Æ¤Ó½Ð¤··ë²Ì¤òÊÖ¤¹¡£ funcall¤ÈƱÍͤˡ¢function¤ÏLisp´Ø¿ô¤«´ðËÜ´Ø¿ô¤Ç¤¢¤ëɬÍפ¬¤¢¤ë¡£ ¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤ä¥Þ¥¯¥í¤Ï¡¢apply¤Ç¤Ï°ÕÌ£¤¬¤Ê¤¤¡£

(setq f 'list)
     ⇒ list
(apply f 'x 'y 'z)
error→ Wrong type argument: listp, z
(apply '+ 1 2 '(3 4))
     ⇒ 10
(apply '+ '(1 2 3 4))
     ⇒ 10
(apply 'append '((a b c) nil (x y z) nil))
     ⇒ (a b c x y z)

apply¤ò»È¤Ã¤¿¶½Ì£¿¼¤¤Îã¤È¤·¤Æ¡¢ Mapping Functions¤Îmapcar¤ÎÀâÌÀ¤ò¸«¤Æ¤Û¤·¤¤¡£

Lisp´Ø¿ô¤Ë¤È¤Ã¤Æ¤Ï¡¢°ú¿ô¤È¤·¤Æ´Ø¿ô¤ò¼õ¤±¼è¤Ã¤¿¤ê¡¢ ¥Ç¡¼¥¿¹½Â¤¡ÊÆÃ¤Ë¡¢¥Õ¥Ã¥¯ÊÑ¿ô¤ä°À­¥ê¥¹¥È¡ËÆâ¤Î´Ø¿ô¤òõ¤·¤Æ funcall¤äapply¤ò»È¤Ã¤Æ¤½¤ì¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤Ï°ìÈÌŪ¤Ç¤¹¡£ ´Ø¿ô°ú¿ô¤ò¼õ¤±ÉÕ¤±¤ë´Ø¿ô¤ò ¤·¤Ð¤·¤Ð¥Õ¥¡¥ó¥¯¥·¥ç¥Ê¥ë¡Êfunctionals¡Ë¤È¸Æ¤Ó¤Þ¤¹¡£

¾ì¹ç¤Ë¤è¤Ã¤Æ¤Ï¡¢¥Õ¥¡¥ó¥¯¥·¥ç¥Ê¥ë¤ò¸Æ¤Ó½Ð¤¹¤È¤­¤Ë¤Ï¡¢ °ú¿ô¤È¤·¤Æ¤Ê¤Ë¤â¤·¤Ê¤¤´Ø¿ô¡Êno-op¡Ë¤ò»ØÄê¤Ç¤­¤ë¤ÈÍ­ÍѤǤ¹¡£ ¤Ä¤®¤Î¤â¤Î¤Ï¡¢2¼ïÎà¤Î¤Ê¤Ë¤â¤·¤Ê¤¤´Ø¿ô¤Ç¤¹¡£

Function: identity arg

¤³¤Î´Ø¿ô¤Ïarg¤òÊÖ¤·¡¢ÉûºîÍѤò»ý¤¿¤Ê¤¤¡£

Function: ignore &rest args

¤³¤Î´Ø¿ô¤Ï°ú¿ô¤ò̵»ë¤·¡¢nil¤òÊÖ¤¹¡£