setcdr
setcdr
函数类似于setcar
函数,不同之处在于该函数替换列表的第二个及其后的元素,而不是第一个元素。
(要了解如何更改列表的最后一个元素,请查看kill-new
函数,该函数使用nthcdr
和setcdr
函数。)
为了了解它是如何工作的,请通过评估以下表达式将变量的值设置为一组驯养的动物:
(setq domesticated-animals (list 'horse 'cow 'sheep 'goat))
如果现在评估该列表,将返回列表(horse cow sheep goat)
:
domesticated-animals ⇒ (horse cow sheep goat)
接下来,通过使用两个参数评估setcdr
,第一个参数是具有列表值的变量的名称,第二个参数是将设置为第一个列表的CDR的列表;
(setcdr domesticated-animals '(cat dog))
如果评估此表达式,将在回显区域看到列表(cat dog)
。这是该函数返回的值。我们感兴趣的结果是副作用,可以通过评估变量domesticated-animals
来查看:
domesticated-animals ⇒ (horse cat dog)
确实,列表从(horse cow sheep goat)
更改为(horse cat dog)
。列表的CDR从(cow sheep goat)
更改为(cat dog)
。