sbcl中nreverse的奇怪行为

时间:2015-11-21 22:15:03

标签: common-lisp sbcl clisp side-effects

当我进入

(defvar lst '(1 2 3 4 5))
(nreverse lst)
lst

在sbcl我得到了答案(1),而在clisp我得到了预期答案(5 4 3 2 1)。

有趣的是,第二行打印了反向列表,但存储在lst中的值是错误的。这是一个功能还是一个bug?我应该只在sbcl上使用 reverse 吗?

1 个答案:

答案 0 :(得分:6)

nreverse可能会以一种副作用以未指定的方式改变原始列表。

您应该只将该函数的结果用作反转列表。

从副作用中可以看出,SBCL和CLISP正在使用不同的实施策略。但你不应该利用这些知识。仅使用功能结果。仅使用nreverse,如果效率很重要且原始列表可以销毁