对于常规列表,您有很多选项,(list)
,null
,'()
都可以。但是,如何构建一个空的可变列表? The documentation似乎没有提供任何nullary构造函数。
答案 0 :(得分:2)
在Racket manual中明确指出:
类似地,可变列表不是列表,除了空列表也是空的可变列表。
因此,用于构建空列表的相同运算符可用于构建空的可变列表。
原因很简单:空列表是一个没有组件的特殊数据结构:因此,如果您没有组件,则没有任何可以变异的内容。因此,可变空列表是空列表的相同对象。您只能使用set-mcar!
或set-mcdr!
变异汽车或可变对的cdr,原因很简单,因为它们是数据结构的组件。
答案 1 :(得分:2)
如果你只是想知道什么是可变正确列表的正确终止符,那么它与不可变列表相同。评估'()
会给出与评估(mlist)
相同的答案,因此与不可变列表没有区别。
如果您希望改变以零元素开头的列表,例如通过在前面添加元素来改变空列表,则无法执行此操作。空列表()
是所有Scheme系统中的不可变单例。它是空列表的唯一表示。您有两种可能的解决方法:创建一个虚拟mcons
来表示数据结构的头部,该头部始终位于第一个元素之前,或者只是改变第一个元素的绑定。根据您在空结构上处理操作的方式,它们的用途各不相同。
答案 2 :(得分:1)
一旦你没有不可变性的列表小溪,为什么不全押milst
s?一个优点是有可用于空可变列表的'构造函数'语义......以及一些用于处理可变列表的实用程序。
#lang racket
(require compatibility/mlist)
(define empty-mutable-list (mlist))
值得一提的是,'()
也是一个杀人主义者:
> (mlist? '())
#t