GolfScript вложенный в то время как петли - PullRequest
1 голос
/ 12 октября 2010

Вложены ли циклы, нарушенные в golfscript, или я не знаю, как их использовать?

Я хочу перебирать 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, кажется, что существует только один текущий условный блок и любое выполнение«пока» перезаписывает это.

В любом случае, как бы я совершил этот подвиг в сценарии гольфа?

1 Ответ

5 голосов
/ 13 октября 2010

Похоже, что (единственный) интерпретатор, к сожалению, не обрабатывает вложенные циклы do / while / before, правильно.Кажется, проблема возникает только тогда, когда у вас есть два из этих циклов, вложенных в одно и то же время, а не когда циклы разных типов.

Например:

{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 / till, если они применимы.Для вашего примера было бы лучше использовать:

6,-1%{:Q"Q: "\+p
 11,-1%{:Z"Z: "\+p}/
}/
...