Next: Function Cells, Previous: Mapping Functions, Up: Functions [Contents][Index]
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)))
¤³¤Î¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤Ï¡¢function-object¤òɾ²Á¤»¤º¤Ë
function-object¤òÊÖ¤¹¡£
¤³¤Î°ÕÌ£¤Ç¤Ïquote
¤ËÅù²Á¤Ç¤¢¤ë¡£
¤·¤«¤·¡¢¤³¤ì¤Ï¡¢Emacs Lisp¥³¥ó¥Ñ¥¤¥é¤ËÂФ·¤Æ¤ÏÃí°Õ½ñ¤¤È¤·¤ÆÆ¯¤¡¢
function-object¤ò´Ø¿ô¤È¤·¤Æ¤Î¤ß»È¤¦°Õ¿Þ¤¬¤¢¤ê¡¢
¤·¤¿¤¬¤Ã¤Æ¡¢¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤â°ÂÁ´¤Ç¤¢¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
Quoting¤Îquote
¤ÈÈæ³Ó¤·¤Æ¤Û¤·¤¤¡£
function
¤È̵̾´Ø¿ô¤òÍѤ¤¤¿¼ÂºÝŪ¤ÊÎã¤Ï¡¢
Accessing Documentation¤Îdocumentation
¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£