是否在highscript中打破了循环,或者我不知道如何使用它们?
我希望将Q从5迭代到0,并且对于每次迭代,将Z从10迭代到0.单循环分别运行良好,它们看起来是自包含的(不依赖于操作之间的堆栈):
5:Q;
{"Q:"Q+ p Q}
{
Q 1- :Q;
}while
10:Z;{"Z:"Z+ p Z}{Z 1- :Z;}while
输出:
"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"
但如果我把Z循环放在Q循环中,我会得到奇怪的结果:
5:Q;
{"Q:"Q+ p Q}
{
10:Z;{"Z:"Z+ p Z}{Z 1- :Z;}while
Q 1- :Q;
}while
输出:
"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中完成这项专长?
答案 0 :(得分:5)
遗憾的是,(唯一的)解释器不能正确处理嵌套的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}/
}/