【发布时间】:2014-12-31 19:03:54
【问题描述】:
我创建了一个函数来从嵌套列表中随机选择一个“位”,例如((1 0 0 1) (1 1 1 1) (0 1 0 1)),然后翻转它。如果是 1,则将其设为 0,反之亦然。该函数运行良好,但我发现尽管我制作了副本,但它会改变原始参数。这里是函数,最后写的两篇演示了这个问题。如果我将((1 1 1 1)) 传递给它,我希望看到(write DNA-seq) 打印的原始值,但是原始值被修改了,所以(write DNA-seq) 和(write CDNA-seq) 打印相同的东西。
(defun rand-mutate (DNA-seq)
(let ((CDNA-seq (copy-list DNA-seq)))
(let ((gene (random-range 0 (length CDNA-seq))))
(let ((base (random-range 0 (length (nth gene CDNA-seq)))))
(cond ((= (nth base (nth gene CDNA-seq)) 0) (setf (nth base (nth gene CDNA-seq)) 1))
(t (setf (nth base (nth gene CDNA-seq)) 0))) (write DNA-seq)(write CDNA-seq)))))
【问题讨论】:
-
您可能会发现this answer 到Changing copies of lists in LISP 很有用。
标签: lisp common-lisp