Function NCONC

UP


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はコピーされずに修正されます。

影響

なし。

例外

なし。

参考

append, concatenate

備考

なし。


TOP, Github