哇,我完全不理解这一点!
我有一个清单,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,在这里; 我错过了什么?!
谢谢!