当我进入
(defvar lst '(1 2 3 4 5))
(nreverse lst)
lst
在sbcl我得到了答案(1),而在clisp我得到了预期答案(5 4 3 2 1)。
有趣的是,第二行打印了反向列表,但存储在lst中的值是错误的。这是一个功能还是一个bug?我应该只在sbcl上使用 reverse 吗?
答案 0 :(得分:6)
nreverse
可能会以一种副作用以未指定的方式改变原始列表。
您应该只将该函数的结果用作反转列表。
从副作用中可以看出,SBCL和CLISP正在使用不同的实施策略。但你不应该利用这些知识。仅使用功能结果。仅使用nreverse
,如果效率很重要且原始列表可以销毁。