Previous: Setcdr, Up: Modifying Lists   [Contents][Index]


5.6.3 ¥ê¥¹¥È¤Î½ç½ø¤òÊѹ¹¤¹¤ë´Ø¿ô

°Ê²¼¤Ï¡¢¥ê¥¹¥È¤ò¹½À®¤¹¤ë¥³¥ó¥¹¥»¥ë¤ÎCDR¤òÊѹ¹¤¹¤ë¤³¤È¤Ç¡¢ ¡ØÇ˲õŪ¤Ë¡Ù¥ê¥¹¥È¤Î½ç½ø¤òÊѹ¹¤¹¤ë´Ø¿ô¤Ç¤¹¡£ ¤³¤ì¤é¤Î´Ø¿ô¤ò¡ØÇ˲õŪ¡Ù¤È¸Æ¤Ö¤Î¤Ï¡¢ ÅϤµ¤ì¤¿°ú¿ô¤Ç¤¢¤ë¤â¤È¤Î¥ê¥¹¥È¤Î¥³¥ó¥¹¥»¥ë¤ò·Ò¤®´¹¤¨¤Æ¿·¤¿¤Ê¥ê¥¹¥È¤Ë ÊѤ¨¤ë¤«¤é¤Ç¤¹¡£

Function: nconc &rest lists

¤³¤Î´Ø¿ô¤Ï¡¢lists¤Î¤¹¤Ù¤Æ¤ÎÍ×ÁǤòÆþ¤ì¤¿¥ê¥¹¥È¤òÊÖ¤¹¡£ append¡Êsee Building Lists¡Ë¤È°Û¤Ê¤ê¡¢ lists¤ò¥³¥Ô¡¼¤·¤Ê¤¤¡£ ¤½¤Î¤«¤ï¤ê¤Ë¡¢³Ælists¤ÎºÇ¸å¤ÎCDR¤ò¸å³¤Î¥ê¥¹¥È¤ò»Ø¤¹¤è¤¦¤ËÊѹ¹¤¹¤ë¡£ lists¤ÎºÇ¸å¤ÏÊѹ¹¤·¤Ê¤¤¡£ ¤¿¤È¤¨¤Ð¡¢¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ë¡£

(setq x '(1 2 3))
     ⇒ (1 2 3)
(nconc x '(4 5))
     ⇒ (1 2 3 4 5)
x
     ⇒ (1 2 3 4 5)

nconc¤ÏºÇ¸å¤Î°ú¿ô¤òÊѹ¹¤·¤Ê¤¤¤Î¤Ç¡¢ ¾å½Ò¤ÎÎã¤Î¤è¤¦¤Ë¡¢'(4 5)¤Ê¤É¤ÎÄê¿ô¥ê¥¹¥È¤ò»È¤Ã¤Æ¤è¤¤¡£ Ʊ¤¸Íýͳ¤ÇºÇ¸å¤Î°ú¿ô¤Ï¥ê¥¹¥È¤Ç¤¢¤ëɬÍפâ¤Ê¤¤¡£

(setq x '(1 2 3))
     ⇒ (1 2 3)
(nconc x 'z)
     ⇒ (1 2 3 . z)
x
     ⇒ (1 2 3 . z)

¤·¤«¤·¤Ê¤¬¤é¡¢¤¹¤Ù¤Æ¤Î°ú¿ô¤Ï¡ÊºÇ¸å¤Î¤â¤Î¤ò½ü¤¤¤Æ¡Ë¥ê¥¹¥È¤Ç¤¢¤ëɬÍפ¬¤¢¤ë¡£

¤è¤¯¤¢¤ëÍ·ê¤Ï¡¢nconc¤ÎºÇ¸å°Ê³°¤Î°ú¿ô¤Ë¡¢ ¥¯¥©¡¼¥È¤·¤¿Äê¿ô¥ê¥¹¥È¤ò»È¤¦¤³¤È¤Ç¤¢¤ë¡£ ¤³¤¦¤¹¤ë¤È¡¢ÆÉ¼Ô¤Î¥×¥í¥°¥é¥à¤Ï¼Â¹Ô¤¹¤ë¤¿¤Ó¤ËÄê¿ô¤òÊѤ¨¤Æ¤·¤Þ¤¦¡£ ¤¿¤È¤¨¤Ð¡¢¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ë¡£

(defun add-foo (x)            ; ¤³¤Î´Ø¿ô¤Ï°ú¿ô¤ÎÀèÆ¬¤Ë
  (nconc '(foo) x))           ;   foo¤òÄɲ乤롢¤È¤·¤¿¤¤
(symbol-function 'add-foo)
     ⇒ (lambda (x) (nconc (quote (foo)) x))
(setq xx (add-foo '(1 2)))    ; ư¤¤¤Æ¤¤¤ë¤è¤¦¤Ë¸«¤¨¤ë
     ⇒ (foo 1 2)
(setq xy (add-foo '(3 4)))    ; ¤É¤¦¤Ê¤Ã¤Æ¤ë¤Î¡©
     ⇒ (foo 1 2 3 4)
(eq xx xy)
     ⇒ t
(symbol-function 'add-foo)
     ⇒ (lambda (x) (nconc (quote (foo 1 2 3 4) x)))
Function: nreverse list

¤³¤Î´Ø¿ô¤Ï¡¢list¤ÎÍ×ÁǤνçÈÖ¤òµÕ½ç¤Ë¤¹¤ë¡£ reverse¤È°Û¤Ê¤ê¡¢nreverse¤Ï ¥ê¥¹¥È¤ò¹½À®¤¹¤ë¥³¥ó¥¹¥»¥ë¤ÎCDR¤òµÕ¸þ¤­¤Ë¤·¤Æ°ú¿ô¤òÊѤ¨¤Æ¤·¤Þ¤¦¡£ list¤ÎºÇ¸å¤Ë¤¢¤Ã¤¿¥³¥ó¥¹¥»¥ë¤ÏÌá¤êÃͤκǽé¤Î¥³¥ó¥¹¥»¥ë¤Ë¤Ê¤ë¡£

¤¿¤È¤¨¤Ð¡¢¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ë¡£

(setq x '(1 2 3 4))
     ⇒ (1 2 3 4)
x
     ⇒ (1 2 3 4)
(nreverse x)
     ⇒ (4 3 2 1)
;; ÀèÆ¬¤Ë¤¢¤Ã¤¿¥³¥ó¥¹¥»¥ë¤Ï¡¢º£¡¢ºÇ¸å¤Ë¤Ê¤Ã¤Æ¤¤¤ë
x
     ⇒ (1)

º®Íð¤òÈò¤±¤ë¤¿¤á¤Ë¡¢nreverse¤Î·ë²Ì¤Ï¡¢ ¤â¤È¤Î¥ê¥¹¥È¤ò¼ý¤á¤Æ¤¤¤¿¤â¤Î¤ÈƱ¤¸ÊÑ¿ô¤Ë³ÊǼ¤¹¤ë¡£

(setq x (nreverse x))

nreverse¤ò(a b c)¤ËŬÍѤ·¤¿·ë²Ì¤ò¿Þ¼¨¤¹¤ë¤È ¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ë¡£

¤â¤È¤Î¥ê¥¹¥È¤ÎÀèÆ¬                        µÕ½ç¤Ë¤·¤¿¥ê¥¹¥È
 -------------        -------------        ------------
| car  | cdr  |      | car  | cdr  |      | car | cdr  |
|   a  |  nil |<--   |   b  |   o  |<--   |   c |   o  |
|      |      |   |  |      |   |  |   |  |     |   |  |
 -------------    |   --------- | -    |   -------- | -
                  |             |      |            |
                   -------------        ------------
Function: sort list predicate

¤³¤Î´Ø¿ô¤Ï¡¢Ç˲õŪ¤Ë¤Ç¤Ï¤¢¤ë¤¬¡¢ list¤ò½ç½ø¤òÊݤäƥ½¡¼¥È¤·¤¿¥ê¥¹¥È¤òÊÖ¤¹¡£ Í×ÁǤÎÈæ³Ó¤Ë¤Ïpredicate¤ò»È¤¦¡£ ½ç½ø¤òÊݤä¿¥½¡¼¥È¤È¤Ï¡¢Æ±¤¸¥½¡¼¥È¥­¡¼¤ò»ý¤ÄÍ×ÁǤÎÁêÂÐ½ç½ø¤ò¡¢ ¥½¡¼¥È¼Â¹ÔÁ°¸å¤ÇÊѹ¹¤·¤Ê¤¤¥½¡¼¥È¤Ç¤¢¤ë¡£ °Û¤Ê¤ë´ð½à¤Ç¤Ä¤®¤Ä¤®¤Ë¥½¡¼¥È¤¹¤ë¤È¤­¤Ë¤Ï¡¢ ½ç½ø¤òÊݤĤ³¤È¤Ï½ÅÍפǤ¢¤ë¡£

°ú¿ôpredicate¤Ï¡¢2¤Ä¤Î°ú¿ô¤ò¼è¤ë´Ø¿ô¤Ç¤¢¤ëɬÍפ¬¤¢¤ë¡£ ¤³¤Î´Ø¿ô¤Ï¡¢list¤Î2¤Ä¤ÎÍ×ÁǤǸƤӽФµ¤ì¤ë¡£ ¾º½ç¤Î¥½¡¼¥È¤Ç¤Ï¡¢predicate¤Ï¡¢ Âè1°ú¿ô¤¬Âè2°ú¿ô¤è¤ê¡Ø¾®¤µ¤¤¡Ù¤È¤­¤Ët¤òÊÖ¤·¡¢ ¤µ¤â¤Ê¤±¤ì¤Ðnil¤òÊÖ¤¹É¬Íפ¬¤¢¤ë¡£

Èæ³Ó´Ø¿ôpredicate¤Ï¡¢¾¯¤Ê¤¯¤È¤âñ°ì¤Îsort¤Î¸Æ¤Ó½Ð¤·Ãæ¤Ï¡¢ °ú¿ô¤ÎǤ°Õ¤ÎÂФËÂФ·¤Æ¿®Íê¤Ç¤­¤ë·ë²Ì¤òÊÖ¤¹É¬Íפ¬¤¢¤ë¡£ ¤Þ¤º¡¢È¿ÂоΤǤ¢¤ë¤³¤È¡£ ¤Ä¤Þ¤ê¡¢a¤¬b¤è¤ê¾®¤µ¤¤¤È¤­¤Ë¤Ï¡¢ b¤¬a¤è¤ê¾®¤µ¤¯¤Æ¤Ï¤¤¤±¤Ê¤¤¡£ ¤Þ¤¿¡¢Á«°Ü§¤¬À®¤êΩ¤Ä¤³¤È¡£ ¤Ä¤Þ¤ê¡¢a¤¬b¤è¤ê¾®¤µ¤¯¡¢¤«¤Ä¡¢b¤¬c¤è¤ê¾®¤µ¤¤¤È¤­¤Ë¤Ï¡¢ a¤Ïc¤è¤ê¾®¤µ¤¯¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¤³¤ì¤é¤ÎÍ×ÀÁ¤òËþ¤¿¤µ¤Ê¤¤Èæ³Ó´Ø¿ô¤òÍѤ¤¤ë¤È¡¢ sort¤Î·ë²Ì¤Ïͽ¬¤Ç¤­¤Ê¤¤¡£

sort¤¬Ç˲õŪ¤Ç¤¢¤ë¤È¤¤¤¦¤Î¤Ï¡¢ list¤ò¹½À®¤¹¤ë¥³¥ó¥¹¥»¥ë¤ÎCDR¤òÊѹ¹¤·¤Æ¡¢ ¥³¥ó¥¹¥»¥ë¤Î½ç½ø¤òÊѹ¹¤¹¤ë¤«¤é¤Ç¤¢¤ë¡£ ÈóÇ˲õŪ¤Ê¥½¡¼¥È´Ø¿ô¤Ç¤Ï¡¢¥½¡¼¥È¤·¤¿Í×ÁǤò³ÊǼ¤¹¤ë¤¿¤á¤Ë¿·¤¿¤Ê¥³¥ó¥¹¥»¥ë¤ò ºîÀ®¤¹¤ë¤Ç¤¢¤í¤¦¡£ ¤â¤È¤Î¥ê¥¹¥È¤òÇ˲õ¤»¤º¤Ë¥½¡¼¥È¤·¤¿¤±¤ì¤Ð¡¢ ¤Þ¤ºcopy-sequence¤Ç¥³¥Ô¡¼¤òºî¤ê¡¢¤½¤ì¤ò¥½¡¼¥È¤¹¤ë¡£

¥½¡¼¥È¤¹¤ëºÝ¡¢list¤Î¥³¥ó¥¹¥»¥ë¤ÎCAR¤ÏÊѹ¹¤·¤Ê¤¤¡£ listÆâ¤ÎÍ×ÁÇa¤òÆþ¤ì¤Æ¤¤¤¿¥³¥ó¥¹¥»¥ë¤Ï¡¢ ¥½¡¼¥È¸å¤Ë¤â¤½¤ÎCAR¤Ë¤Ïa¤¬Æþ¤Ã¤Æ¤¤¤ë¡£ ¤·¤«¤·¡¢CDR¤òÊѹ¹¤·¤Æ¤¢¤ë¤Î¤Ç¡¢¥ê¥¹¥ÈÆâ¤Ç¤Ï°Û¤Ê¤ë¾ì½ê¤Ë¸½¤ì¤ë¡£ ¤¿¤È¤¨¤Ð¡¢¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ë¡£

(setq nums '(1 3 2 6 5 4 0))
     ⇒ (1 3 2 6 5 4 0)
(sort nums '<)
     ⇒ (0 1 2 3 4 5 6)
nums
     ⇒ (1 2 3 4 5 6)

·Ù¹ð¡§ nums¤Î¥ê¥¹¥È¤Ë¤Ï 0¤¬Æþ¤Ã¤Æ¤¤¤Ê¤¤¤³¤È¤ËÃí°Õ¡£ ¡Ênums¤¬»Ø¤¹¡Ë¥³¥ó¥¹¥»¥ë¤Ï¥½¡¼¥ÈÁ°¤ÈƱ¤¸¥³¥ó¥¹¥»¥ë¤À¤¬¡¢ ¤½¤ì¤Ï¤â¤Ï¤ä¥ê¥¹¥È¤ÎÀèÆ¬¤Ë¤Ï¤Ê¤¤¡£ °ú¿ô¤òÊÝ»ý¤·¤Æ¤¤¤¿ÊÑ¿ô¤¬¡¢ ¥½¡¼¥È¤·¤¿¥ê¥¹¥ÈÁ´ÂΤòÊÝ»ý¤·¤Æ¤¤¤ë¤È²¾Äꤷ¤Ê¤¤¤³¤È¡ª ¤«¤ï¤ê¤Ë¡¢sort¤Î·ë²Ì¤òÊݸ¤·¤Æ¡¢¤½¤ì¤ò»È¤¦¡£ ¿¤¯¤Î¾ì¹ç¡¢¤Ä¤®¤Î¤è¤¦¤Ë¡¢¤â¤È¤Î¥ê¥¹¥È¤òÊÝ»ý¤·¤Æ¤¤¤¿ÊÑ¿ô¤Ë·ë²Ì¤òÊݸ¤·Ä¾¤¹¡£

(setq nums (sort nums '<))

¥½¡¼¥È¤ò¹Ô¤¦Â¾¤Î´Ø¿ô¤Ë¤Ä¤¤¤Æ¤Ï¡¢see Sorting¡£ sort¤ÎÍ­ÍѤÊÎã¤Ë¤Ä¤¤¤Æ¤Ï¡¢ Accessing Documentation¤Îdocumentation¤ò»²¾È¡£


Previous: Setcdr, Up: Modifying Lists   [Contents][Index]