有效地返回突变结构

returning mutated structures efficiently

我有一个结构:

(defstruct spider omegas values continuation)

并且我有接受这种结构的函数和return它的变异版本:

(defun dec (s)
  (make-spider
    :omegas (spider-omegas s)
    :values (cons (- (car (spider-values s)) 1) (cdr (spider-values s)))
    :continuation (cdr (spider-continuation s))))

我有一种预感,这会在内存中创建不需要存在的 spider 的新实例(google 没有帮助)。我关心的是我 returning 是它自己的内存块,但我不关心 spider 即参数 s 到我完成时功能。有没有更流畅的方法来 return 这样的结构?

如果您只想改变参数结构对象:

(defun dec (s)
  (decf (first (spider-values s)))  ; mutates the list of values
  (pop (spider-continuation s))
  s)