Next: Lambda Expressions, Previous: Functions, Up: Functions [Contents][Index]
°ìÈÌŪ¤Ë¤Ï¡¢´Ø¿ô¤È¤Ï¡¢°ú¿ô¡Êarguments¡Ë¤È¸Æ¤Ð¤ì¤ëÃͤòÍ¿¤¨¤é¤ì¡¢ ·×»»¤ò¹Ô¤¦¤¿¤á¤Îµ¬Â§¤Ç¤¹¡£ ¤³¤Î·×»»·ë²Ì¤ò´Ø¿ô¤ÎÃͤȸƤӤޤ¹¡£ ·×»»¤Ç¤ÏÉûºîÍÑ¡¢¤Ä¤Þ¤ê¡¢ÊÑ¿ô¤ÎÃͤä¥Ç¡¼¥¿¹½Â¤¤ÎÆâÍÆ¤Ë·Ñ³¤¹¤ëÊѹ¹ ¤òȼ¤¦¤³¤È¤â¤Ç¤¤Þ¤¹¡£
Emacs Lisp¤Î´Ø¿ô¤ä´Ø¿ô¤Î¤è¤¦¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Ë´Ø¤¹¤ë½ÅÍפÊÍѸì¤ò¤¢¤²¤Æ¤ª¤¤Þ¤¹¡£
Emacs Lisp¤Ç¤Ï¡¢Lisp¥×¥í¥°¥é¥à¤Ë¤ª¤¤¤Æ°ú¿ô¤ËŬÍѲÄǽ¤â¤Î¤Ï ¤Ê¤ó¤Ç¤¢¤ì´Ø¿ô¡Êfunction¡Ë¤Ç¤¢¤ë¡£ Lisp¤Ç½ñ¤¤¤¿´Ø¿ô¤ò°ÕÌ£¤¹¤ë¾ì¹ç¤â¤¢¤ë¡£ ¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤ä¥Þ¥¯¥í¤Ï´Ø¿ô¤Ç¤Ï¤Ê¤¤¡£
´ðËÜ´Ø¿ô¡Êprimitive¡Ë¤Ï¡¢car
¤äappend
¤Ê¤É¤ÎC¤Ç½ñ¤¤¤¿
Lisp¤«¤é¸Æ¤Ó½Ð¤·²Äǽ¤Ê´Ø¿ô¤Ç¤¢¤ë¡£
¤³¤ì¤é¤Î´Ø¿ô¤Ï¡¢ÁȤ߹þ¤ß´Ø¿ô¤È¤«subrs¤È¤â¸Æ¤Ö¡£
¡Ê¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤Ï´ðËÜ´Ø¿ô¤È¤â¹Í¤¨¤é¤ì¤ë¡£¡Ë
´Ø¿ô¤ò´ðËÜ´Ø¿ô¤È¤·¤Æ¼ÂÁõ¤¹¤ëÍýͳ¤Ï¡¢ ¤½¤ì¤¬´ðËÜŪ¤Ê¤â¤Î¤Ç¤¢¤ë¡¢ ¤½¤ì¤¬¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Îµ¡Ç½¤ËÂФ¹¤ë Äã¥ì¥Ù¥ë¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤òÄ󶡤¹¤ë¡¢ ¤¢¤ë¤¤¤Ï¡¢¹â®¤Ëưºî¤¹¤ëɬÍפ¬¤¢¤ë¤«¤é¤Ç¤¢¤ë¡£ ´ðËÜ´Ø¿ô¤òÊѹ¹¤·¤¿¤êÄɲ乤ëÍ£°ì¤ÎÊýË¡¤Ï¡¢ C¥½¡¼¥¹¤òÊѹ¹¤·¤Æ¥¨¥Ç¥£¥¿¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤³¤È¤Ç¤¢¤ë¡£ see Writing Emacs Primitives¡£
¥é¥à¥À¼°¡Êlambda expression¡Ë¤Ï¡¢Lisp¤Ç½ñ¤¤¤¿´Ø¿ô¤Ç¤¢¤ë¡£ ¤³¤ì¤é¤Ë¤Ä¤¤¤Æ¤Ï°Ê²¼¤ÎÀá¤ÇÀâÌÀ¤¹¤ë¡£
¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¡Êspecial form¡Ë¤Ï´Ø¿ô¤Ë»÷¤¿´ðËÜ´Ø¿ô¤Ç¤¢¤ë¤¬¡¢ ¤½¤Î°ú¿ô¤¹¤Ù¤Æ¤òÉáÄ̤Τ褦¤Ë¤Ïɾ²Á¤·¤Ê¤¤¡£ °ú¿ô¤Î°ìÉô¤òɾ²Á¤·¤¿¤ê¡¢ÉáÄ̤Ȥϰۤʤë½ç½ø¤Çɾ²Á¤·¤¿¤ê¡¢ Ê£¿ô²óɾ²Á¤·¤¿¤ê¤¹¤ë¡£ ¿¤¯¤Î¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤Ë¤Ä¤¤¤Æ¤Ï¡¢ Control Structures¤ÇÀâÌÀ¤·¤Æ¤¢¤ë¡£
¥Þ¥¯¥í¡Êmacro¡Ë¤Ï¡¢¥×¥í¥°¥é¥Þ¤¬Lisp¤ÇÄêµÁ¤·¤¿¹½Ê¸¤Ç¤¢¤ë¡£ ¥Þ¥¯¥í¤È´Ø¿ô¤È¤Î°ã¤¤¤Ï¡¢¥Þ¥¯¥í¤Ï¡¢ ÆÉ¼Ô¤¬½ñ¤¤¤¿Lisp¼°¤ò¤â¤È¤Î¼°¤Î¤«¤ï¤ê¤Ëɾ²Á¤µ¤ì¤ëÅù²Á¤Ê¼°¤ËÊÑ´¹¤¹¤ë¡£ ¥Þ¥¯¥í¤Ï¡¢¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤Ç¤Ç¤¤ë¼ïÎà¤Î¤³¤È¤ò Lisp¥×¥í¥°¥é¥Þ¤ËÄ󶡤¹¤ë¡£ ¥Þ¥¯¥í¤ÎÄêµÁÊýË¡¤È»È¤¤Êý¤Ë¤Ä¤¤¤Æ¤Ï¡¢see Macros¡£
¥³¥Þ¥ó¥É¡Êcommand¡Ë¤È¤Ï¡¢
command-execute
¤¬µ¯Æ°¤Ç¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ê¡¢
¥¡¼Îó¤ËÂФ·¤ÆÄêµÁ¤Ç¤¤ë¡£
¤¤¤¯¤Ä¤«¤Î´Ø¿ô¤Ï¥³¥Þ¥ó¥É¤Ç¤¢¤ë¡£
Lisp¤Ç½ñ¤¤¤¿´Ø¿ô¤ËÂÐÏÃÀë¸À¡Êsee Defining Commands¡Ë¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¤È¤¡¢
¤½¤Î´Ø¿ô¤Ï¥³¥Þ¥ó¥É¤Ç¤¢¤ë¡£
¤½¤Î¤è¤¦¤Ê´Ø¿ô¤Ï¡¢Â¾¤Î´Ø¿ô¤ÈƱÍͤËLisp¼°¤«¤é¸Æ¤Ó½Ð¤¹¤³¤È¤¬¤Ç¤¤ë¡£
¤½¤Î¾ì¹ç¡¢´Ø¿ô¤¬¥³¥Þ¥ó¥É¤Ç¤¢¤ë¤È¤¤¤¦»ö¼Â¤Ï´Ø·¸¤Ê¤¤¡£
¥¡¼¥Ü¡¼¥É¥Þ¥¯¥í¡Êʸ»úÎ󤫥٥¯¥È¥ë¡Ë¤â¥³¥Þ¥ó¥É¤Ç¤¢¤ë¤¬¡¢ ¤½¤ì¤é¤Ï´Ø¿ô¤Ç¤Ï¤Ê¤¤¡£ ¥·¥ó¥Ü¥ë¤Î´Ø¿ôÄêµÁ¤¬¥³¥Þ¥ó¥É¤Ç¤¢¤ì¤Ð¡¢¥·¥ó¥Ü¥ë¤Ï¥³¥Þ¥ó¥É¤Ç¤¢¤ë¡£ ¤½¤Î¤è¤¦¤Ê¥·¥ó¥Ü¥ë¤Ï¡¢M-x¤Çµ¯Æ°¤Ç¤¤ë¡£ ¥·¥ó¥Ü¥ë¤ÎÄêµÁ¤¬´Ø¿ô¤Ç¤¢¤ì¤Ð¡¢¥·¥ó¥Ü¥ë¤Ï´Ø¿ô¤Ç¤â¤¢¤ë¡£
ÂǸ°¥³¥Þ¥ó¥É¡Êkeystroke command¡Ë¤È¤Ï¡¢ ¥¡¼Îó¡Êŵ·¿Åª¤Ë¤Ï1¤«¤é3ÂǸ°¡Ë¤Ë¥Ð¥¤¥ó¥É¤µ¤ì¤¿¥³¥Þ¥ó¥É¤Ç¤¢¤ë¡£ ¤³¤³¤Ç¤Î¶èÊ̤ϡ¢Emacs°Ê³°¤Î¥¨¥Ç¥£¥¿¤Î¡Ø¥³¥Þ¥ó¥É¡Ù¤Î°ÕÌ£¤È¤Î º®Íð¤òËɤ°¤¿¤á¤Ç¤¢¤ë¤¬¡¢ Lisp¥×¥í¥°¥é¥à¤Ë¤È¤Ã¤Æ¤Ï¡¢¤³¤Î¶èÊ̤ÏÉáÄ̤ϽÅÍפǤϤʤ¤¡£
¥Ð¥¤¥È¥³¡¼¥É´Ø¿ô¡Êbyte-code function¡Ë¤È¤Ï¡¢ ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥é¤Ç¥³¥ó¥Ñ¥¤¥ë¤·¤¿´Ø¿ô¤Ç¤¢¤ë¡£ see Byte-Code Type¡£
¤³¤Î´Ø¿ô¤Ï¡¢object¤¬¡¢¤Ê¤ó¤é¤«¤Î´Ø¿ô¡¢¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¡¢
¥Þ¥¯¥í¤Ç¤¢¤ì¤Ð¡¢t
¤òÊÖ¤¹¡£
¤³¤Î´Ø¿ô¤Ï¡¢object¤¬ÁȤ߹þ¤ß´Ø¿ô¡Ê¤Ä¤Þ¤ê¡¢Lisp´ðËÜ´Ø¿ô¡Ë¤Ç¤¢¤ì¤Ð
t
¤òÊÖ¤¹¡£
(subrp 'message) ; message
¤Ï¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢
⇒ nil ; subr¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤Ï¤Ê¤¤
(subrp (symbol-function 'message)) ⇒ t
¤³¤Î´Ø¿ô¤Ï¡¢object¤¬¥Ð¥¤¥È¥³¡¼¥É´Ø¿ô¤Ç¤¢¤ì¤Ðt
¤òÊÖ¤¹¡£
¤¿¤È¤¨¤Ð¡¢¤Ä¤®¤Î¤È¤ª¤ê¡£
(byte-code-function-p (symbol-function 'next-line)) ⇒ t