Следующая функция вычисляет количество орбит, необходимое для mandelbrot fractal первоначального значения, чтобы «убежать»:Как удалить изменяемую переменную в этой функции mandelbrot без рекурсии?
extern crate num;
fn mandel_escape(x: f32, y: f32, limit: f32, orbits: u32) -> Option<u32> {
let c = num::complex::Complex32::new(x, y);
let mut z = c;
for i in 0 .. orbits {
z = z * z + c;
if z.norm_sqr() > limit { return Some(i); }
}
None
}
Я понимаю, что нет никакой гарантий оптимизации хвостового вызова в Русте. Как я могу удалить изменяемую переменную в этой функции без рекурсии?
Почему? Вы можете злоупотреблять некоторыми итераторными адаптерами ('fold' и' take_while', просто игнорируя значение цикла), но это просто скроет вам изменчивость. Это совершенно идиоматическая Руста. Является ли это проблемой игрушек, и у вас есть какая-то конкретная проблема, когда что-то подобное делает жалованье? – LinearZoetrope
Также, пытаясь быть полезным, не значит. Комментарии усиливают терпение. – LinearZoetrope
Хотел бы свести к минимуму изменчивость, поскольку он помогает понять логику. Ссылочная целостность и все такое. – rityzmon