在复杂列表中变换数据

时间:2014-11-20 19:29:21

标签: scheme mutable

假设我已经定义了以下列表:

(define a (list 1 2))
(define b (list a 3))

我明确定义了a以显示,因为我想修改b中的列表。我是否需要从头开始重新构建整个数据结构以将项添加到内部列表?

编辑:我不是要更改内部列表中的元素,我想在内部列表中添加另一个元素。

1 个答案:

答案 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)