我需要操作像1 + sqrt(3)这样的表达式,并进行加法,减法和除法等基本算法.我希望结果是某种规范形式,以便它可以用作地图中的键.由于舍入问题,将1 + sqrt(3)转换为浮点是不可行的.
我在Python中使用SymPy来完成这项任务.Haskell有一个等效的本机库吗?
下面的代码z作为局部变量,但它的行为就好像它是一个全局变量:
(defun foo (m)
(let ((z '(stuff nil)))
(push m (getf z 'stuff))
(print z)))
(foo 1)
(foo 2)
(foo 3)
Run Code Online (Sandbox Code Playgroud)
我希望输出是
(STUFF (1))
(STUFF (2))
(STUFF (3))
T
Run Code Online (Sandbox Code Playgroud)
但是当我用SBCL运行它时,我明白了
(STUFF (1))
(STUFF (2 1))
(STUFF (3 2 1))
T
Run Code Online (Sandbox Code Playgroud)
为什么会这样?这种行为是属性列表特有的吗?