つの質問:common-lispでは、リスト内の要素をインプレースに挿入するにはどうしたらいいですか?
1.Iは(、任意の位置が、リストの先頭にある理由で、質問2を参照)関数はインプレースリスト内の要素を挿入するように:
CL> (defun insert-in-place (the-list after-position new-element) ....) => ...
CL> (setf testy-list (list 'a 'b 'c 'd)) => ...
CL> testy-list => ('A 'B 'C 'D)
CL> (insert-in-place testy-list 1 'BOOOO) => ...
CL> testy-list => ('A 'B 'BOOOO 'C 'D)
2. argsに値が渡されるため、リストの最初のコンスセルが渡されるので、関数を介してリストの先頭に要素を挿入することは不可能ですそれはコピーであるため、その車を変更するだけで元のコピーではなく、次のコンスセルが共有され、その場で変更が可能ですが、コピーカーが変更されます。私は正しいですか?
ありがとうございます。質問2について:修正するために正確に渡されているものを呼び出すと(テストリストを修正する)テストリストの第1コンスセルを値またはリファレンスとして使用するか?私は正しいとは言えませんが、質問2についての私の議論の欠陥を見つけることはできません... – Paralife
また私は自分自身でこれをやりました: (rplacd(nthcdr position lst)(cons elem(nthcdr(+ 1位)lst)))) しかしあなたの方が良いです。 実際には、nthcdrを設定したかったのですが、私が使用しているclispでは、nthcdrは設定できません。私はそれがsetfableにする価値があるのだろうかと思う。私の他の質問を参照してください:http://stackoverflow.com/questions/4387967/does-a-setfable-nthcdr-implementation-exist – Paralife
質問2について:あなたが(testyリストを変更する)を呼び出すと、コンスセル自体を渡します( "参照によって")。 – koddo