【问题标题】:Strange behaviour of nreverse in sbclsbcl 中 nreverse 的奇怪行为
【发布时间】:2015-11-21 22:15:03
【问题描述】:

当我进入时

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

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

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

【问题讨论】:

  • 来自the spec,这里是签名nreverse sequence => reversed-sequence。取反后的序列作为返回值。
  • 附加说明:您不应该修改文字值。

标签: common-lisp sbcl clisp side-effects


【解决方案1】:

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

你应该只使用函数的结果作为反向列表。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2012-09-01
    相关资源
    最近更新 更多