可能重复:
LISP - 全局变量在重新初始化后保持其旧值
我目前正在使用 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)