% Function NCONC
Function NCONC
nconc
&rest lists => concatenated-list
lists - 最後以外はリストでなければなりません
(ドットリストは許容されますが、循環リストは許容されません)。
最後のlistはどんなオブジェクトでも可能です。
concatenated-list - リスト
listsを連結したリストを返却します。
もしlistsがないときは、(nconc)
はnil
を返却します。
nconc
は下記のような再帰的関係を用いて定義されます。
(nconc) => ()
(nconc nil . lists) == (nconc . lists)
(nconc list) => list
(nconc list-1 list-2) == (progn (rplacd (last list-1) list-2) list-1)
(nconc list-1 list-2 . lists) == (nconc (nconc list-1 list-2) . lists)
(nconc) => NIL
(setq x '(a b c)) => (A B C)
(setq y '(d e f)) => (D E F)
(nconc x y) => (A B C D E F)
x => (A B C D E F)
この例では、
xの最後のコンスがrplacd
により値yに変更されたので、
最終的なxの値が変更されています。
もし(nconc x y)
が再び評価されると、
循環リストが生成されるので、
それは(A B C D E F D E F D E F ...)
のように印字され、
永遠に繰り返されます。
もし*print-circle*
をnil
以外の値にすることで、
(A B C . #1=(D E F . #1#))
と印刷されるでしょう。
(setq foo (list 'a 'b 'c 'd 'e)
bar (list 'f 'g 'h 'i 'j)
baz (list 'k 'l 'm)) => (K L M)
(setq foo (nconc foo bar baz)) => (A B C D E F G H I J K L M)
foo => (A B C D E F G H I J K L M)
bar => (F G H I J K L M)
baz => (K L M)
(setq foo (list 'a 'b 'c 'd 'e)
bar (list 'f 'g 'h 'i 'j)
baz (list 'k 'l 'm)) => (K L M)
(setq foo (nconc nil foo bar nil baz)) => (A B C D E F G H I J K L M)
foo => (A B C D E F G H I J K L M)
bar => (F G H I J K L M)
baz => (K L M)
listはコピーされずに修正されます。
なし。
なし。
なし。