1

デモンストレーションの目的で、

私はリストを持っています:リストを持っています:

 > (setf x (list '(1 2 1) '(4 5 4)))
 ((1 2 1) (4 5 4))
 > (length x)
 2

新しいリスト'(2 3 2)を追加したい。追加機能:

 > (append '(2 3 2) x)
 (2 3 2 (1 2 1) (4 5 4))

 > (length (append '(2 3 2) x))
 5

私がやりたいことを本当にやっていない。

私が欲しいのは次のように'(2 3 2)を追加することです:

((8 7 8) (1 2 1) (4 5 4))

長さが3になるようにします。

これまでのところ、私がやりたいことを行うための例や方法を見たことがありません。これを行うための組み込み関数または効果的な方法はありますか?

4

2 に答える 2

4

APPENDは、あなたが求めている破壊的な機能ではありません。APPENDは、新しいリストを割り当て、それを返します。

目標を達成するためにできることは次のとおりです。

(setf x (append '((...)) x)) ;;appends the quoted list to x

ポインタを破壊的に調整する関数NCONCもあります。

あなたの瞑想のために、私は例の仕事を提示します:

CL-USER> (defparameter *x* nil)
*X*
CL-USER> (setf *x* '((1 2 3) (4 5 6)))
((1 2 3) (4 5 6))
CL-USER> (append *x* '(10 11 12))
((1 2 3) (4 5 6) 10 11 12)
CL-USER> (append *x* '((10 11 12)))
((1 2 3) (4 5 6) (10 11 12))
CL-USER> (setf *x* (append *x* '((10 11 12))))
((1 2 3) (4 5 6) (10 11 12))
CL-USER> *x*
((1 2 3) (4 5 6) (10 11 12))
CL-USER> 
于 2013-01-02T22:39:59.967 に答える
2

APPENDリストを追加します。2つのサブリストのリストがあり、その前に((1 2 1) (4 5 4))1つのサブリストの別のリストを追加する((2 3 2))場合。

CL-USER 99 > (append '((2 3 2)) '((1 2 1) (4 5 4)))
((2 3 2) (1 2 1) (4 5 4))

または、リストの前に1つのアイテムを追加する場合は、これを使用します。

CL-USER 98 > (cons '(2 3 2) '((1 2 1) (4 5 4)))
((2 3 2) (1 2 1) (4 5 4))
于 2013-01-02T23:42:08.760 に答える