sbcl 中 nreverse 的奇怪行为
Strange behaviour of nreverse in sbcl
当我输入
(defvar lst '(1 2 3 4 5))
(nreverse lst)
lst
在 sbcl 中我得到了答案 (1),而在 clisp 中我得到了预期的答案 (5 4 3 2 1)。
有趣的是,第二行打印了反向列表,但 lst 中存储的值是错误的。这是功能还是错误?我应该只在 sbcl 上使用 reverse 吗?
nreverse
可能会以未指定的方式改变原始列表。
你应该只使用函数的结果作为反向列表。
从副作用可以看出,SBCL和CLISP使用了不同的实现策略。但是你不应该利用这些知识。仅使用函数结果。仅使用 nreverse
,如果效率很重要并且可以 destroyed.
当我输入
(defvar lst '(1 2 3 4 5))
(nreverse lst)
lst
在 sbcl 中我得到了答案 (1),而在 clisp 中我得到了预期的答案 (5 4 3 2 1)。
有趣的是,第二行打印了反向列表,但 lst 中存储的值是错误的。这是功能还是错误?我应该只在 sbcl 上使用 reverse 吗?
nreverse
可能会以未指定的方式改变原始列表。
你应该只使用函数的结果作为反向列表。
从副作用可以看出,SBCL和CLISP使用了不同的实现策略。但是你不应该利用这些知识。仅使用函数结果。仅使用 nreverse
,如果效率很重要并且可以 destroyed.