Дорогие растовчане. У меня есть к вам вопрос. Я неоднократно сталкивался с проблемой замены рекурсии на цикл в расте. Например вот такая абстрактная ситуация:
struct Lazy<T> {...}
impl<T> Lazy<T> {
fn force(&mut self) -> &mut T {...}
}
struct InfLazyList<T> {
head : T,
tail : Lazy<InfLazyList<T>>
}
impl<T> InfLazyList<T> {
fn index(&mut self, i : usize) -> &T {
if i == 0 {
&self.head
} else {
self.tail.force().index(i - 1)
}
}
}
fn index(&mut self, i : usize) -> &T {
let mut top : &mut InfLazyList<T> = &mut self;
while i > 0 {
top = top.tail.force();
}
&top.head
}