修改 Lisp 中结构域/槽的副本

问题描述

我正在尝试修改结构字段的副本。我尝试使用 COPY-TREE 无济于事。这是我的代码:

(defstruct scenario
  (board '() :type list)
  (letters "" :type string)
  (blank-char #\- :type character))

(defparameter *scen-1*
  (make-scenario
    :board (string->board "cat---|a-----|b-----" #\|)))

SETF之前:

(print *scen-1*)

#S(SCENARIO
   :BOARD ("CAT---" "A-----" "B-----")
   :LETTERS ""
   :BLANK-CHAR #\-)

当我尝试使用 COPY-TREE 修改电路板的副本时,它会修改原始电路板。

(let ((board (copy-tree (scenario-board *scen-1*))))
  (setf (subseq (nth 1 board) 0 2) "GG"))

(print *scen-1*)

#S(SCENARIO
   :BOARD ("CAT---" "GG----" "B-----")
   :LETTERS ""
   :BLANK-CHAR #\-)

*scen-1* 应该保持不变。

如何修改 BOARD 字段的副本,而不是原始字段?谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)