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


11.8 ´Ø¿ô¥»¥ë¤ÎÆâÍÆ¤Î»²¾È

¥·¥ó¥Ü¥ë¤Î´Ø¿ôÄêµÁ¡Êfunction definition¡Ë¤È¤Ï¡¢ ¥·¥ó¥Ü¥ë¤Î´Ø¿ô¥»¥ë¤Ë³ÊǼ¤µ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡£ ¤³¤³¤ÇÀâÌÀ¤¹¤ë´Ø¿ô¤Ï¡¢¥·¥ó¥Ü¥ë¤Î´Ø¿ô¥»¥ë¤ò»²¾È¤·¤¿¤ê¡¢Ä´¤Ù¤¿¤ê¡¢ ÀßÄꤷ¤¿¤ê¤·¤Þ¤¹¡£

Function Indirection¤Î´Ø¿ôindirect-function¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

Function: symbol-function symbol

¤³¤ì¤Ï¡¢symbol¤Î´Ø¿ô¥»¥ë¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¡£ ¥·¥ó¥Ü¥ë¤Î´Ø¿ô¥»¥ë¤¬¶õ¤Ç¤¢¤ë¤È¡¢¥¨¥é¡¼void-function¤òÄÌÃΤ¹¤ë¡£

¤³¤Î´Ø¿ô¤Ï¡¢ÊÖ¤¹¥ª¥Ö¥¸¥§¥¯¥È¤¬Àµ¤·¤¤´Ø¿ô¤Ç¤¢¤ë¤«¤É¤¦¤«¸¡ºº¤·¤Ê¤¤¡£

(defun bar (n) (+ n 2))
     ⇒ bar
(symbol-function 'bar)
     ⇒ (lambda (n) (+ n 2))
(fset 'baz 'bar)
     ⇒ bar
(symbol-function 'baz)
     ⇒ bar

¥·¥ó¥Ü¥ë¤Ë°ìÅÙ¤â´Ø¿ôÄêµÁ¤òÍ¿¤¨¤Æ¤¤¤Ê¤¤¤È¡¢ ¤½¤Î¥·¥ó¥Ü¥ë¤Î´Ø¿ô¥»¥ë¤Ï¶õ¡Êvoid¡Ë¤Ç¤¢¤ë¤È¤¤¤¤¤Þ¤¹¡£ ¤¤¤¤¤«¤¨¤ì¤Ð¡¢´Ø¿ô¥»¥ë¤Ë¤Ï¤É¤ó¤ÊLisp¥ª¥Ö¥¸¥§¥¯¥È¤âÆþ¤Ã¤Æ¤¤¤Þ¤»¤ó¡£ ¤½¤Î¤è¤¦¤Ê¥·¥ó¥Ü¥ë¤ò´Ø¿ô¤È¤·¤Æ¸Æ¤Ó½Ð¤½¤¦¤È¤¹¤ë¤È¡¢ ¥¨¥é¡¼void-function¤òÄÌÃΤ·¤Þ¤¹¡£

¶õ¡Êvoid¡Ë¤Ï¡¢nil¤ä¥·¥ó¥Ü¥ëvoid¤È°ã¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£ ¥·¥ó¥Ü¥ënil¤âvoid¤âLisp¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ê¡¢ ¤½¤ì¤é¤Ï¾¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ÈƱÍͤ˴ؿô¥»¥ë¤Ë³ÊǼ¤Ç¤­¤Þ¤¹ ¡Ê¤½¤·¤Æ¡¢¤½¤ì¤é¤òdefun¤ÇÄêµÁ¤·¤Æ¤ª¤±¤Ð¡¢Àµ¤·¤¤´Ø¿ô¤Ç¤¢¤ë¡Ë¡£ ¶õ¤Î´Ø¿ô¥»¥ë¤Ë¤Ï¡¢¤É¤ó¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤â´Þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó¡£

¥·¥ó¥Ü¥ë¤Î´Ø¿ôÄêµÁ¤¬¶õ¤«¤É¤¦¤«¤Ïfboundp¤ÇÄ´¤Ù¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥·¥ó¥Ü¥ë¤Ë´Ø¿ôÄêµÁ¤òÍ¿¤¨¤¿¤¢¤È¤Ç¤â¡¢ fmakunbound¤ò»È¤Ã¤Æ¤Õ¤¿¤¿¤Ó¶õ¤Ë¤Ç¤­¤Þ¤¹¡£

Function: fboundp symbol

¤³¤Î´Ø¿ô¤Ï¡¢¥·¥ó¥Ü¥ë¤Î´Ø¿ô¥»¥ë¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤¬Æþ¤Ã¤Æ¤¤¤ì¤Ðt¤òÊÖ¤·¡¢ ¤µ¤â¤Ê¤±¤ì¤Ðnil¤òÊÖ¤¹¡£ ¥ª¥Ö¥¸¥§¥¯¥È¤¬Àµ¤·¤¤´Ø¿ô¤Ç¤¢¤ë¤«¤É¤¦¤«¸¡ºº¤·¤Ê¤¤¡£

Function: fmakunbound symbol

¤³¤Î´Ø¿ô¤Ïsymbol¤Î´Ø¿ô¥»¥ë¤ò¶õ¤Ë¤¹¤ë¡£ ¤³¤ì°Ê¹ß¤Ë¤³¤Î¥»¥ë¤ò»²¾È¤·¤è¤¦¤È¤¹¤ë¤È¡¢ ¥¨¥é¡¼void-function¤ò°ú¤­µ¯¤³¤¹¡£ ¡ÊVoid Variables¤Îmakunbound¤â»²¾È¡Ë¡£

(defun foo (x) x)
     ⇒ foo
(foo 1)
     ⇒1
(fmakunbound 'foo)
     ⇒ foo
(foo 1)
error→ Symbol's function definition is void: foo
Function: fset symbol definition

¤³¤Î´Ø¿ô¤Ï¡¢symbol¤Î´Ø¿ô¥»¥ë¤Ëdefinition¤ò³ÊǼ¤¹¤ë¡£ ·ë²Ì¤Ïdefinition¤Ç¤¢¤ë¡£ Ä̾definition¤Ï´Ø¿ô¤«´Ø¿ô̾¤Ç¤¢¤ë¤Ù¤­¤À¤¬¡¢ ¤½¤¦¤Ç¤¢¤ë¤«¤É¤¦¤«¸¡ºº¤·¤Ê¤¤¡£ °ú¿ôsymbol¤ÏÄ̾ï¤É¤ª¤êɾ²Á¤µ¤ì¤ë°ú¿ô¤Ç¤¢¤ë¡£

¤³¤Î´Ø¿ô¤ÎÉáÄ̤Î3¤Ä¤Î»È¤¤Êý¤Ï¤Ä¤®¤Î¤È¤ª¤ê¡£

¤³¤ì¤é¤Î»ÈÍÑÎã¤ò¼¨¤¹¡£

;; foo¤ÎÄêµÁ¤òold-foo¤ËÊݸ¤¹¤ë
(fset 'old-foo (symbol-function 'foo))
;; ¥·¥ó¥Ü¥ëcar¤òxfirst¤Î´Ø¿ôÄêµÁ¤Ë¤¹¤ë
;; ¡Ê¤³¤ì¤Ë¤Ï¡¢fset¤è¤êdefalias¤Î¤Û¤¦¤¬¤è¤¤¡Ë
(fset 'xfirst 'car)
     ⇒ car
(xfirst '(1 2 3))
     ⇒ 1
(symbol-function 'xfirst)
     ⇒ car
(symbol-function (symbol-function 'xfirst))
     ⇒ #<subr car>
;; ̾Á°ÉÕ¤­¤Î¥­¡¼¥Ü¡¼¥É¥Þ¥¯¥í¤òÄêµÁ¤¹¤ë
(fset 'kill-two-lines "\^u2\^k")
     ⇒ "\^u2\^k"
;; ¾¤Î´Ø¿ô¤òÊѹ¹¤¹¤ë´Ø¿ô
(defun copy-function-definition (new old)
  "Define NEW with the same function definition as OLD."
  (fset new (symbol-function old)))

´û¸¤Î´Ø¿ôÄêµÁ¤ò³ÈÄ¥¤¹¤ë´Ø¿ô¤ò½ñ¤¯¤È¤­¤Ë¤Ï¡¢ ¤Ä¤®¤Î¤è¤¦¤Ê¾ïÅå¶ç¤ò»È¤¦¤³¤È¤â¤¢¤ê¤Þ¤¹¡£

(fset 'old-foo (symbol-function 'foo))
(defun foo ()
  "Just like old-foo, except more so."
  (old-foo)
  (more-so))

foo¤¬¼«Æ°¥í¡¼¥É¤ÈÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤È¡¢¤³¤ì¤ÏÀµ¤·¤¯Æ°ºî¤·¤Þ¤»¤ó¡£ ¤½¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï¡¢foo¤¬old-foo¤ò¸Æ¤Ó½Ð¤¹¤È¡¢ Lisp¤Ï¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¤·¤Æold-foo¤òÄêµÁ¤·¤è¤¦¤È¤·¤Þ¤¹¡£ ¤·¤«¤·¡¢¤³¤ì¤Ïold-foo¤Ç¤Ï¤Ê¤¯foo¤òÄêµÁ¤¹¤ë¤Î¤Ç¡¢ Àµ¤·¤¤·ë²Ì¤òÆÀ¤é¤ì¤Þ¤»¤ó¡£ ¤³¤ÎÌäÂê¤ò²óÈò¤¹¤ëÍ£°ì¤ÎÊýË¡¤Ï¡¢ foo¤Î¸Å¤¤ÄêµÁ¤ò°Ü¤¹¤Þ¤¨¤Ë¡¢³Î¼Â¤Ë¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¤·¤Æ¤ª¤¯¤³¤È¤Ç¤¹¡£

¤·¤«¤·¡¢Ê̤βսê¤ÇÄêµÁ¤µ¤ì¤¿´Ø¿ô¤òºÆÄêµÁ¤¹¤ëLisp¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ¤Ï¡¢ ¤¤¤º¤ì¤Ë¤·¤Æ¤â¡¢¤³¤ì¤Ç¤Ï¥â¥¸¥å¡¼¥ë²½¤â¸«Ä̤·¤â¤è¤¯¤¢¤ê¤Þ¤»¤ó¡£ ¥¢¥É¥Ð¥¤¥ºµ¡Ç½¡Êsee Advising Functions¡Ë¤ò»È¤¨¤Ð¡¢¸«Ä̤·¤¬¤è¤¯¤Ê¤ê¤Þ¤¹¡£


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