两个问题:
1.我想要一个函数在列表中就地插入一个元素(在任何位置但是列表的开头,参见问题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)
Run Code Online (Sandbox Code Playgroud)
2.我认为通过函数将元素插入到列表的开头是不可能的,因为args是通过值传递的,所以由于传递了列表的第一个cons单元格,所以它是按值传递的,它是一个副本,所以改变它的汽车只改变一个复制车,而不是原来的,虽然以下的利弊细胞是共享的,可以改变到位.我对么?
kod*_*ddo 12
1)这里是:
(defun insert-after (lst index newelt)
(push newelt (cdr (nthcdr index lst)))
lst)
(insert-after '(a c d) 0 'b) => (A B C D)
Run Code Online (Sandbox Code Playgroud)
2)净细胞的破坏性修改:
(setf testy-list '(a bar))
(defun modify (list)
(setf (first list) 'foo))
(modify testy-list)
testy-list => (FOO BAR)
Run Code Online (Sandbox Code Playgroud)
这将第一个利弊细胞的汽车设置为'foo.