/ / Грешка при вмъкване докато има линия за golfscript - golfscript

Грешка при вмъкване при линия за golfscript - 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
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"

Но ако сложа цикъла 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"
"Z:5"
"Z:4"
"Z:3"
"Z:2"
"Z:1"
"Z:0"
"Z:0"

Въз основа на двукратно отпечатване на Z, изглежда, че има само един текущ условен блок и всяко изпълнение на "докато" го презаписва.

Във всеки случай, как бих постигнал този успех в голфстинг?

Отговори:

2 за отговор № 1

Изглежда като (само) преводачза съжаление не се справя с вложените докато / докато / докато се въртят правилно.Проблемът изглежда, че възниква само когато имате два от тези бримки от едно и също време вложени, а не когато цикъла е различен тип.

Например:

{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 loops, ако те са приложими. За вашия пример, би било по-добре да използвате:

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