我有一个列表,L1
。我想复制一份L2
,以便在我修改L2
时,L1
保持不变。我认为这是copy-seq
的用途,但它没有达到预期的效果。
(defun tcopy ()
(let ((seq1 nil)
(seq2 nil))
(setf seq1 (list (list 11 22) (list 33 44 55)))
(setf seq2 (copy-seq seq1))
(format t "before -- s1: ~a s2: ~a~%" seq1 seq2)
(setf (nth 1 (nth 1 seq2)) 99)
(format t "after -- s1: ~a s2: ~a~%" seq1 seq2)))
输出:
? (tcopy)
before -- s1: ((11 22) (33 44 55)) s2: ((11 22) (33 44 55))
after -- s1: ((11 22) (33 99 55)) s2: ((11 22) (33 99 55)) ; Undesired: s1 is modified
NIL
?
我也尝试了以下内容:
;(setf seq2 (copy-seq seq1))
(setf seq2 (reduce #'cons seg1 :from-end t :initial-value nil))
它给出了相同的结果。 Lisp-n00b,在这里;我错过了什么?!
谢谢!