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


11.7 ̵̾´Ø¿ô

Lisp¤Ç¤Ï¡¢´Ø¿ô¤È¤Ï¡¢lambda¤Ç»Ï¤Þ¤ë¥ê¥¹¥È¡¢ ¤½¤Î¤è¤¦¤Ê¥ê¥¹¥È¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤¿¥Ð¥¤¥È¥³¡¼¥É´Ø¿ô¡¢ ¤¢¤ë¤¤¤Ï¡¢´ðËÜ´Ø¿ô¤Îsubr¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡£ ̾Á°¤Ï¡ØÍ¾Ê¬¡Ù¤Ê¤Î¤Ç¤¹¡£ ÉáÄ̤δؿô¤Ïdefun¤ÇÄêµÁ¤·¡¢¤½¤Î¤È¤­Ì¾Á°¤òÍ¿¤¨¤Þ¤¹¤¬¡¢ ÌÀ¼¨Åª¤Ê¥é¥à¥À¼°¡¢¤Ä¤Þ¤ê¡¢ÌµÌ¾´Ø¿ô¤ò»È¤Ã¤¿¤Û¤¦¤¬¤è¤ê´ÊÁǤʾì¹ç¤â¤¢¤ê¤Þ¤¹¡£ ¤½¤Î¤è¤¦¤Ê¥ê¥¹¥È¤Ï¡¢´Ø¿ô̾¤ò»È¤¨¤ë¾ìÌ̤ʤé¤Ð¡¢¤É¤³¤Ç¤â»È¤¨¤Þ¤¹¡£

¤½¤Î¤è¤¦¤Ê¥ê¥¹¥È¤ò¤É¤ó¤ÊÊýË¡¤Çºî¤Ã¤Æ¤â¡¢Àµ¤·¤¤´Ø¿ô¤È¤Ê¤ê¤Þ¤¹¡£ ¤Ä¤®¤Î¤è¤¦¤Ë¤·¤Æ¤â¤«¤Þ¤ï¤Ê¤¤¤Î¤Ç¤¹¡£

(setq silly (append '(lambda (x)) (list (list '+ (* 3 4) 'x))))
⇒ (lambda (x) (+ 12 x))

¤³¤ì¤Ï¡¢(lambda (x) (+ 12 x))¤Î¤è¤¦¤Ê¥ê¥¹¥È¤ò·×»»¤·¡¢ ¤½¤ÎÃͤòsilly¤ÎÃ͡ʴؿôÄêµÁ¤Ç¤Ï¤Ê¤¤¡ª¡Ë¤È¤·¤Þ¤¹¡£

¤³¤Î´Ø¿ô¤Ï¤Ä¤®¤Î¤è¤¦¤Ë¸Æ¤Ó½Ð¤»¤Þ¤¹¡£

(funcall silly 1)
⇒ 13

¡Ê(silly 1)¤È½ñ¤¤¤Æ¤âưºî¤·¤Ê¤¤¡£ ¤Ê¤¼¤Ê¤é¡¢¤³¤Î´Ø¿ô¤Ï¡¢silly¤Î´Ø¿ôÄêµÁ¤Ç¤Ï¤Ê¤¤¤«¤é¤Ç¤¢¤ë¡£ silly¤Ë¤Ï´Ø¿ôÄêµÁ¤òÍ¿¤¨¤Æ¤Ê¤¯¡¢ ÊÑ¿ô¤È¤·¤Æ¤ÎÃͤòÍ¿¤¨¤¿¤À¤±¤Ç¤¢¤ë¡£¡Ë

¤Û¤È¤ó¤É¤Î¾ì¹ç¡¢ÌµÌ¾´Ø¿ô¤ÏÆÉ¼Ô¤Î¥×¥í¥°¥é¥à¤Ë¸½¤ì¤ëÄê¿ô¤Ç¤¹¡£ ¤¿¤È¤¨¤Ð¡¢´Ø¿ômapcar¤Î°ú¿ô¤Î1¤Ä¤ËÅϤ·¤¿¤¤¤È¤­¤Ê¤É¤Ç¤¹¡£ mapcar¤Ï¡¢¥ê¥¹¥È¤Î³ÆÍ×ÁǤ˻ØÄꤷ¤¿´Ø¿ô¤òŬÍѤ·¤Þ¤¹¡£

Âè3°ú¿ô¤Ë´Ø¿ô¤ò¼è¤ë´Ø¿ôchange-property¤òÄêµÁ¤·¤Þ¤¹¡£

(defun change-property (symbol prop function)
  (let ((value (get symbol prop)))
    (put symbol prop (funcall function value))))

¤³¤³¤Ç¡¢¿ô¤ò2Çܤ¹¤ë´Ø¿ô¤òÅϤ·¤Æchange-property¤ò»È¤¦ ´Ø¿ô¤òÄêµÁ¤·¤Þ¤¹¡£

(defun double-property (symbol prop)
  (change-property symbol prop '(lambda (x) (* 2 x))))

¤³¤Î¤è¤¦¤Ê¾ì¹ç¡¢¤Ä¤®¤Î¤è¤¦¤Ë¡¢ÌµÌ¾´Ø¿ô¤ò¥¯¥©¡¼¥È¤¹¤ë¤Ë¤Ï¡¢ ñ½ã¤Ê¥¯¥©¡¼¥È¤Î¤«¤ï¤ê¤Ë¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥àfunction¤ò»È¤¤¤Þ¤¹¡£

(defun double-property (symbol prop)
  (change-property symbol prop
                   (function (lambda (x) (* 2 x)))))

quote¤Î¤«¤ï¤ê¤Ëfunction¤ò»È¤Ã¤¿¾ì¹ç¤Ë°ã¤¤¤¬¤Ç¤ë¤Î¤Ï¡¢ ´Ø¿ôdouble-property¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤¿¤È¤­¤Ç¤¹¡£ ¤¿¤È¤¨¤Ð¡¢double-property¤Î2ÈÖÌܤÎÄêµÁ¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È¡¢ ̵̾´Ø¿ô¤â¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Þ¤¹¡£ °ìÊý¡¢ÉáÄ̤Îquote¤ò»È¤Ã¤¿ºÇ½é¤ÎÄêµÁ¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È¡¢ change-property¤ØÅϤ¹°ú¿ô¤Ï¡¢½ñ¤¤¤¿¤È¤ª¤ê¤Î¥ê¥¹¥È¤Ç¤¹¡£

(lambda (x) (* x 2))

Lisp¥³¥ó¥Ñ¥¤¥é¤Ï¡¢¤³¤Î¥ê¥¹¥È¤¬´Ø¿ô¤Ë¸«¤¨¤¿¤È¤·¤Æ¤â¡¢ ¤³¤Î¥ê¥¹¥È¤ò´Ø¿ô¤È¤Ï¤ß¤Ê¤·¤Þ¤»¤ó¡£ ¤È¤¤¤¦¤Î¤Ï¡¢¥³¥ó¥Ñ¥¤¥é¤Ë¤Ïchange-property¤¬¥ê¥¹¥È¤Ë¤Ê¤Ë¤ò¹Ô¤¦¤« ¤ï¤«¤é¤Ê¤¤¤«¤é¤Ç¤¹¡£ ¤¿¤Ö¤ó¡¢Âè3Í×ÁǤÎCAR¤¬¥·¥ó¥Ü¥ë*¤« ¤É¤¦¤«Ä´¤Ù¤ì¤Ð¤è¤¤¤Î¤Ç¤·¤ç¤¦¡ª function¤ò»È¤¦¤È¡¢¥³¥ó¥Ñ¥¤¥é¤ËÂФ·¤ÆÀè¤Ø¿Ê¤ó¤Ç Äê¿ô¤Î´Ø¿ô¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤â°ÂÁ´¤Ç¤¢¤ë¤³¤È¤òÅÁ¤¨¤Þ¤¹¡£

´Ø¿ô̾¤ò¥¯¥©¡¼¥È¤¹¤ë¤È¤­¤Ëquote¤Î¤«¤ï¤ê¤Ëfunction¤ò ½ñ¤¯¤³¤È¤â¤¢¤ê¤Þ¤¹¤¬¡¢¤³¤ÎÍÑË¡¤Ï¥³¥á¥ó¥È¤Î¤è¤¦¤Ê¤â¤Î¤Ç¤¹¡£

(function symbol) ≡ (quote symbol) ≡ 'symbol

ÆþÎϹ½Ê¸#'¤Ï¡¢function¤Î¾Êά·Á¤Ç¤¹¡£ ¤¿¤È¤¨¤Ð¡¢

#'(lambda (x) (* x x))

¤Ï¡¢¤Ä¤®¤ÈÅù²Á¤Ç¤¹¡£

(function (lambda (x) (* x x)))
Special Form: function function-object

¤³¤Î¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤Ï¡¢function-object¤òɾ²Á¤»¤º¤Ë function-object¤òÊÖ¤¹¡£ ¤³¤Î°ÕÌ£¤Ç¤Ïquote¤ËÅù²Á¤Ç¤¢¤ë¡£ ¤·¤«¤·¡¢¤³¤ì¤Ï¡¢Emacs Lisp¥³¥ó¥Ñ¥¤¥é¤ËÂФ·¤Æ¤ÏÃí°Õ½ñ¤­¤È¤·¤ÆÆ¯¤­¡¢ function-object¤ò´Ø¿ô¤È¤·¤Æ¤Î¤ß»È¤¦°Õ¿Þ¤¬¤¢¤ê¡¢ ¤·¤¿¤¬¤Ã¤Æ¡¢¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤â°ÂÁ´¤Ç¤¢¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£ Quoting¤Îquote¤ÈÈæ³Ó¤·¤Æ¤Û¤·¤¤¡£

function¤È̵̾´Ø¿ô¤òÍѤ¤¤¿¼ÂºÝŪ¤ÊÎã¤Ï¡¢ Accessing Documentation¤Îdocumentation¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£