可能重复:
LISP - Global variable keep their old value after reinitialization
我目前正在使用Lisp(使用Common Lisp)完成一些课程,并且无处可解决我遇到的这个问题。
解释起来很棘手但是这里......
情况: 我有两个全局变量,p1& p2,它们是多项式。我的任务是创建一个多项式计算器,到目前为止进展顺利。
我将多项式元素保留为特定的格式:3x ^ 2 ==((x 2)3),我创建了两个函数,递归地遍历两个多项式元素列表。
如果我想将3x ^ 2和2x ^ 2加在一起,答案将是5x ^ 2(或“((x 2)(3 + 2))”)。
我有第三个列表,即每当计算元素/无法计算时附加的结果。
问题: 通过我可以添加的两个元素,我创建了一个临时变量以添加到结果中。但是,尽管我做了什么,全局变量也会发生变化。
我尝试过let,lambda,各种功能等等。我已经被困了几天了,非常感谢你能给我的任何帮助:)
以下是我的意思的一个小例子:
(setf p1 '((x 2) 2))
;2x^2
(setf p2 '((x 2) 3))
;3x^2
(if (equal (first p1) (first p2))
(progn
(setf temp p1)
(setf (second temp) (+ (second p1) (second p2)))
(append-to-result temp)
(print p1)
(print temp)))
输出:
((x 2)5)
((x 2)5)
答案 0 :(得分:2)
当你这样做时:
(setf temp p1)
您没有制作p1
引用的列表结构的副本。这两个变量现在都指的是相同的缺点单元格。然后当你这样做:
(setf (second temp) ...)
您正在修改这两个变量仍然引用的列表结构。改为:
(setf temp (copy-tree p1))