【问题标题】:Can I use append! on literal lists?我可以使用附加!在文字列表上?
【发布时间】:2021-11-29 13:59:05
【问题描述】:

据我了解,在文字列表上使用set-car!set-cdr! 是无效的。

(define nums '(1 2 3))
(set-car! nums 10)  ; Invalid.

考虑到这一点,我可以使用文字列表作为 SRFI 1 的 append! 过程的参数吗?我之所以问这个问题是因为append! 的实现可能在除append! 的最后一个参数之外的所有参数上都使用set-cdr!。如果 set-cdr! 在文字列表上无效,那么在文字列表上使用 append! 也是如此。我的想法对吗?

append! 的最后一个参数使用文字列表怎么样?

案例:

  • (append! (list 1) '(2 3)) — 这有效吗?
  • (append! '(1) (list 2 3)) — 这有效吗?

【问题讨论】:

    标签: scheme


    【解决方案1】:

    文字常量,例如'(1 2 3)不可变的,这意味着您不能修改它们的任何部分。 srfi/1 中的 description for append! 表示

    [...] 允许但不是必须更改参数列表中的 cons 单元格以构造结果列表。最后一个参数永远不会改变;结果列表与此参数共享结构。

    因此,最后一个参数可能是文字:其他参数都不是。

    【讨论】:

      【解决方案2】:

      如果系统将列表实现为pure functional data,那么就不可能以方便的方式进行变异。因此,此要求不会强加 cons 单元的突变以允许纯功能实现有效(反之亦然,此类实现的存在会对定义要求产生影响)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-12
        • 1970-01-01
        • 2011-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-15
        • 2015-10-08
        相关资源
        最近更新 更多