golfscript的嵌套while循环出错
是嵌套的,而循环在golfscript中被破坏,还是我不知道如何使用它们 我想将Q从5迭代到0,对于每个迭代,将Z从10迭代到0。单个循环单独运行良好,并且它们似乎是自包含的(不依赖于操作之间的堆栈): 但是如果我把Z循环放在Q循环中,我会得到奇怪的结果:golfscript的嵌套while循环出错,golfscript,Golfscript,是嵌套的,而循环在golfscript中被破坏,还是我不知道如何使用它们 我想将Q从5迭代到0,对于每个迭代,将Z从10迭代到0。单个循环单独运行良好,并且它们似乎是自包含的(不依赖于操作之间的堆栈): 但是如果我把Z循环放在Q循环中,我会得到奇怪的结果: 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" "
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"
基于Z打印两次,似乎只有一个当前条件块,任何执行“while”都会覆盖它
在任何情况下,我如何在golfscript中完成这一壮举?看起来(唯一)解释器不幸地无法正确处理嵌套的do/while/until循环。问题似乎只有在嵌套了两个相同时间的循环时才会出现,而不是在循环类型不同时
例如:
{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"
奇怪的是,我以前没有注意到这个错误。通常,如果适用,使用构造{}%和{}/将比使用do/while/until循环更好。例如,最好使用:
6,-1%{:Q"Q: "\+p
11,-1%{:Z"Z: "\+p}/
}/
可能重复的
6,-1%{:Q"Q: "\+p
11,-1%{:Z"Z: "\+p}/
}/