你如何在 Racket 中创建一个空的可变列表?
How do you create an empty mutable list in Racket?
对于常规列表,您有很多选择,(list)
、null
、'()
都可以。但是如何构造一个空的 mutable 列表呢? The documentation 似乎没有提供任何 nullary 构造函数。
一旦你在 list creek 上没有不变性,为什么不全力以赴 milst
s?一个优点是 'constructor' 语义可用于空的可变列表......以及一些用于处理可变列表的实用程序。
#lang racket
(require compatibility/mlist)
(define empty-mutable-list (mlist))
可能值得一提的是 '()
也是一个 mlist:
> (mlist? '())
#t
在Racket manual中明确规定:
Similarly, a mutable list is not a list, except that the empty list is also the empty mutable list.
因此,用于构建空列表的相同运算符可用于构建空可变列表。
原因很简单:空列表是一种没有组件的特殊数据结构:所以,如果你没有组件,就没有什么可以改变的。因此,可变空列表是 与空列表相同的 对象。您只能用 set-mcar!
或 set-mcdr!
改变可变对的汽车或 cdr,原因很简单,因为它们 是数据结构的 组件。
如果您只是想知道什么是可变专有列表的专有终止符,那么它与不可变专有列表相同。评估 '()
给出与评估 (mlist)
相同的答案,因此与不可变列表没有区别。
如果你想改变一个以零元素开头的列表,比如通过在前面添加一个元素来改变一个空列表,你不能这样做。空列表 ()
是所有 Scheme 系统中的不可变单例。它是空列表的唯一表示。您有两种可能的解决方法:制作一个虚拟 mcons
来表示始终位于第一个元素之前的数据结构的头部,或者只是改变第一个元素的绑定。根据您将如何处理空结构上的操作,它们的用处会有所不同。
对于常规列表,您有很多选择,(list)
、null
、'()
都可以。但是如何构造一个空的 mutable 列表呢? The documentation 似乎没有提供任何 nullary 构造函数。
一旦你在 list creek 上没有不变性,为什么不全力以赴 milst
s?一个优点是 'constructor' 语义可用于空的可变列表......以及一些用于处理可变列表的实用程序。
#lang racket
(require compatibility/mlist)
(define empty-mutable-list (mlist))
可能值得一提的是 '()
也是一个 mlist:
> (mlist? '())
#t
在Racket manual中明确规定:
Similarly, a mutable list is not a list, except that the empty list is also the empty mutable list.
因此,用于构建空列表的相同运算符可用于构建空可变列表。
原因很简单:空列表是一种没有组件的特殊数据结构:所以,如果你没有组件,就没有什么可以改变的。因此,可变空列表是 与空列表相同的 对象。您只能用 set-mcar!
或 set-mcdr!
改变可变对的汽车或 cdr,原因很简单,因为它们 是数据结构的 组件。
如果您只是想知道什么是可变专有列表的专有终止符,那么它与不可变专有列表相同。评估 '()
给出与评估 (mlist)
相同的答案,因此与不可变列表没有区别。
如果你想改变一个以零元素开头的列表,比如通过在前面添加一个元素来改变一个空列表,你不能这样做。空列表 ()
是所有 Scheme 系统中的不可变单例。它是空列表的唯一表示。您有两种可能的解决方法:制作一个虚拟 mcons
来表示始终位于第一个元素之前的数据结构的头部,或者只是改变第一个元素的绑定。根据您将如何处理空结构上的操作,它们的用处会有所不同。