Next: Inline Functions, Previous: Anonymous Functions, Up: Functions [Contents][Index]
¥·¥ó¥Ü¥ë¤Î´Ø¿ôÄêµÁ¡Êfunction definition¡Ë¤È¤Ï¡¢ ¥·¥ó¥Ü¥ë¤Î´Ø¿ô¥»¥ë¤Ë³ÊǼ¤µ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡£ ¤³¤³¤ÇÀâÌÀ¤¹¤ë´Ø¿ô¤Ï¡¢¥·¥ó¥Ü¥ë¤Î´Ø¿ô¥»¥ë¤ò»²¾È¤·¤¿¤ê¡¢Ä´¤Ù¤¿¤ê¡¢ ÀßÄꤷ¤¿¤ê¤·¤Þ¤¹¡£
Function Indirection¤Î´Ø¿ôindirect-function
¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤ì¤Ï¡¢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
¤ò»È¤Ã¤Æ¤Õ¤¿¤¿¤Ó¶õ¤Ë¤Ç¤¤Þ¤¹¡£
¤³¤Î´Ø¿ô¤Ï¡¢¥·¥ó¥Ü¥ë¤Î´Ø¿ô¥»¥ë¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤¬Æþ¤Ã¤Æ¤¤¤ì¤Ðt
¤òÊÖ¤·¡¢
¤µ¤â¤Ê¤±¤ì¤Ðnil
¤òÊÖ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¤¬Àµ¤·¤¤´Ø¿ô¤Ç¤¢¤ë¤«¤É¤¦¤«¸¡ºº¤·¤Ê¤¤¡£
¤³¤Î´Ø¿ô¤Ï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
¤³¤Î´Ø¿ô¤Ï¡¢symbol¤Î´Ø¿ô¥»¥ë¤Ëdefinition¤ò³ÊǼ¤¹¤ë¡£ ·ë²Ì¤Ïdefinition¤Ç¤¢¤ë¡£ Ä̾definition¤Ï´Ø¿ô¤«´Ø¿ô̾¤Ç¤¢¤ë¤Ù¤¤À¤¬¡¢ ¤½¤¦¤Ç¤¢¤ë¤«¤É¤¦¤«¸¡ºº¤·¤Ê¤¤¡£ °ú¿ôsymbol¤ÏÄ̾ï¤É¤ª¤êɾ²Á¤µ¤ì¤ë°ú¿ô¤Ç¤¢¤ë¡£
¤³¤Î´Ø¿ô¤ÎÉáÄ̤Î3¤Ä¤Î»È¤¤Êý¤Ï¤Ä¤®¤Î¤È¤ª¤ê¡£
fset
¤Î¤«¤ï¤ê¤Ëdefalias
¤ò»È¤¦¤Ù¤¤Ç¤¢¤ë¡£
see Defining Functions¡£¡Ë
defun
¤Ç¤Ï¤Ç¤¤Ê¤¤¡£
¤¿¤È¤¨¤Ð¡¢fset
¤ò»È¤Ã¤Æ¡¢s1
¤Ë´Ø¿ôÄêµÁ¤È¤·¤Æ
Ê̤Υ·¥ó¥Ü¥ës2
¤òÍ¿¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£
¤¹¤ë¤È¡¢s1
¤Ï¡¢s2
¤Î¸½ºß¤ÎÄêµÁ¤ÎÊÌ̾¤È¤·¤ÆÆ¯¤¯¡£
¡Ê¤³¤ì¤òs1
¤ÎÄêµÁ¤È¹Í¤¨¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢
¤ä¤Ï¤ê¡¢fset
¤Î¤«¤ï¤ê¤Ëdefalias
¤ò»È¤¦¡£¡Ë
defun
¤¬´ðËÜ´Ø¿ô¤Ç¤Ê¤«¤Ã¤¿¤Ê¤é¤Ð¡¢
fset
¤ò»È¤Ã¤Æ¡Ê¥Þ¥¯¥í¤È¤·¤Æ¡ËLisp¤Çdefun
¤ò½ñ¤¯¤³¤È¤¬¤Ç¤¤ë¡£
¤³¤ì¤é¤Î»ÈÍÑÎã¤ò¼¨¤¹¡£
;; 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: Inline Functions, Previous: Anonymous Functions, Up: Functions [Contents][Index]