Я знаю, что в D уже есть цикл while, но из-за его расширенных функций я хотел бы посмотреть, как бы он выглядел, если бы цикл while был реализован в коде.
мотивация: принятый ответ на этот вопрос на SO.
Я знаю, что в D уже есть цикл while, но из-за его расширенных функций я хотел бы посмотреть, как бы он выглядел, если бы цикл while был реализован в коде.
мотивация: принятый ответ на этот вопрос на SO.
Использование ленивых параметров функции:
void whileLoop(lazy bool cond, void delegate() loopBody) {
Begin:
if(!cond) return;
loopBody();
goto Begin;
}
// Test it out.
void main() {
import std.stdio;
int i;
whileLoop(i < 10, {
writeln(i);
i++;
});
}
используя функцию с рекурсией: (хвостовой вызов будет оптимизирован;))
void whileLoop(bool delegate() cond,void delegate() fun){
if(cond()){
fun();
whileLoop(cond,fun);
}
}
замыкания должны использоваться с этим
или используя чрезмерно/недостаточно используемый goto
startloop:if(!condition)goto endloop;
//code
goto startloop;
endloop:;
goto
к началу функции, и во время рекурсии не будет создаваться накладных расходов стека (это можно сделать, когда при возврате не требуется выполнять код разрыва стека)
- person ratchet freak; 14.07.2011