Rust: Como implementar a lista vinculada?
Eu pensei em mergulhar no Rust implementando uma estrutura e algoritmos muito simples, comecei com uma lista vinculada. Acontece que não é tão simples assim. Este é o meu código até agora:
enum List<T>
{
Node(T, ~List<T>),
Nil
}
impl<T> List<T>
{
fn new(vector: &[T]) -> List<T> { Nil }
fn add(&mut self, item: T)
{
let tail = self;
loop
{
match *tail
{
Node(_, ~ref next) => tail = next,
Nil => break
}
}
*tail = Node(item, ~Nil);
}
}
Isso não será compilado porque o próximo não pode ser atribuído à cauda na instrução de correspondência devido a mutabilidade incompatível. Sei que isso pode ser feito facilmente usando ponteiros de coleta de lixo, mas isso acaba com o objetivo educacional do exercício: eu gostaria de saber como fazer isso sem os indicadores Gc ou Rc.