假设我已经定义了以下列表:
(define a (list 1 2))
(define b (list a 3))
我明确定义了a
以显示,因为我想修改b
中的列表。我是否需要从头开始重新构建整个数据结构以将项添加到内部列表?
编辑:我不是要更改内部列表中的元素,我想在内部列表中添加另一个元素。
答案 0 :(得分:3)
可以使用set-car!
和set-cdr!
就地修改列表,只要您将列表中需要修改的确切对和参考值作为参数传递即可。例如,要替换内部列表中的元素:
(define a (list 1 2))
(define b (list a 3))
b
=> '((1 2) 3)
(set-car! (cdar b) 'x)
b
=> ((1 x) 3)
如果你想在内部列表中添加另一个元素,请执行以下操作:
(set-cdr! (cdar b) '(4))
b
=> ((1 x 4) 3)