São aninhados enquanto loops quebrados em golfscript ou eu não sei como usá-los?
Eu quero iterar Q de 5 para 0, e para cada iteração, iterar Z de 10 para 0. Os loops simples funcionam bem separadamente, e eles parecem auto-contidos (não confiando na pilha entre as operações):
5:Q;
{"Q:"Q+ p Q}
{
Q 1- :Q;
}while
10:Z;{"Z:"Z+ p Z}{Z 1- :Z;}while
Output:
"Q:5"
"Q:4"
"Q:3"
"Q:2"
"Q:1"
"Q:0"
"Z:10"
"Z:9"
"Z:8"
"Z:7"
"Z:6"
"Z:5"
"Z:4"
"Z:3"
"Z:2"
"Z:1"
"Z:0"
Mas se eu colocar o loop Z dentro do loop Q, obtenho resultados estranhos:
5:Q;
{"Q:"Q+ p Q}
{
10:Z;{"Z:"Z+ p Z}{Z 1- :Z;}while
Q 1- :Q;
}while
Output:
"Q:5"
"Z:10"
"Z:9"
"Z:8"
"Z:7"
"Z:6"
"Z:5"
"Z:4"
"Z:3"
"Z:2"
"Z:1"
"Z:0"
"Z:0"
Com base na impressão Z para fora duas vezes, parece que existe apenas um bloco condicional atual e qualquer execução de "while" substitui-o.
De qualquer forma, como eu conseguiria esse feito no golfscript?
Respostas:
2 para resposta № 1Parece que o intérprete (apenas)infelizmente não manipula aninhado do / while / até loops corretamente.O problema parece surgir apenas quando você tem dois desses loops ao mesmo tempo aninhados, e não quando os loops são tipos diferentes.
Por exemplo:
{0do 1}do #not an infinite loop, but it should be
{0{}while 1}do #is an infinite loop as expected
{0{"i"p}while 1}{"o"p}while
#not an infinite loop, outputs "i" instead of continuously outputting "o"
Estranhamente eu não notei esse erro antes. Geralmente, usar as construções {}% e {} / será melhor do que usar os ciclos do / while / until se elas forem aplicáveis. Para o seu exemplo, seria melhor usar:
6,-1%{:Q"Q: "+p
11,-1%{:Z"Z: "+p}/
}/