golfscript嵌套while循环

时间:2010-10-12 15:02:33

标签: loops while-loop nested-loops golfscript

是否在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中完成这项专长?

1 个答案:

答案 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}/
}/