2016-09-22 3 views
1

Для обычного списка у вас есть много опций, (list), null, '() все работает. Но как вы строите пустой список mutable? The documentation, похоже, не предоставляет никакой функции-конструктора.Как создать пустой изменчивый список в Racket?

+2

Из документов: «пустой список также является пустым переменчивым списком» – stchang

+0

@stchang, это то, что я получаю только для просмотра документации по функциям. ответьте как ответ, и я отметю правильно –

ответ

2

Если вы просто хотите знать, что является правильным терминатором для изменяемого правильного списка, то это то же самое, что и для неизменяемого. Оценка '() дает тот же ответ, что и оценка (mlist), поэтому нет никакой разницы между неизменными списками.

Если вы хотите изменить список, начинающийся с нулевых элементов, например, с изменением пустого списка, добавив элемент впереди, вы не можете этого сделать. Пустой список () - неизменный синглтон во всех системах Scheme. Это единственное представление пустого списка. У вас есть два возможных решения: Сделайте манекен mcons, чтобы представить главу вашей структуры данных, которая всегда находится перед первым элементом или просто мутирует привязку для первого элемента. В зависимости от того, как вы собираетесь работать с ops на пустых структурах, они различаются по полезности.

0

Как только вы закроете ручей без неизменности, почему бы не пойти на все с milsts? Преимущество состоит в том, что существует семантика «конструктора», доступная для пустых изменяемых списков ... и несколько служебных процедур для работы с изменяемыми списками.

#lang racket 
(require compatibility/mlist) 
(define empty-mutable-list (mlist)) 

Это, вероятно, стоит отметить, что '() также mlist:

> (mlist? '()) 
#t 
2

В Racket manual это четко указано:

Аналогично, изменяемый список не является списком, за исключением что пустой список также является пустым изменчивым списком.

Так что те же самые операторы, которые использовались для создания пустого списка, могут быть использованы для создания пустого изменяемого списка.

Причина очень проста: пустой список представляет собой специальную структуру данных без компонентов: поэтому, если у вас нет компонентов, нет ничего, что может быть мутировано. Таким образом, изменяемый пустой список - это тот же объект, что и пустой список. Вы можете мутировать только автомобиль или cdr изменчивой пары с set-mcar! или set-mcdr!, по той простой причине, что они являются компонентами структуры данных.

Смежные вопросы