Очередная мудрость древних
Jul. 27th, 2022 10:13 amЯ довольно давно писал про алгольные трюки c "продолжениями", но оказывается, передача меток как параметров, в сущности, не нужна, если язык в принципе разрешает нелокальные переходы.
Практически идентично программе на Алголе-60 по ссылке. Так что Вирт был молодец, упростил язык без потерь в функциональности.
00001 1 1 _PROGRAM MAIN(OUTPUT); _LABEL 1;
00007 2 2 _PROCEDURE M(I:INTEGER; _PROCEDURE X, Y); _LABEL 1;
00007 3 3 _PROCEDURE A; _BEGIN _GOTO 1 _END;
00017 4 3 _BEGIN
00026 5 4 _IF I < 20 _THEN _BEGIN
00027 6 4 M(I+1, Y, A);
00042 7 4 X;
00046 8 3 _END _ELSE _IF _FALSE _THEN
00047 9 3 1: WRITE(I);
00052 10 2 _END;
00053 11 2 _PROCEDURE T; _BEGIN _GOTO 1 _END;
00063 12 2 _BEGIN
00064 13 2 M(0, T, T); 1:
00112 14 0 _END.
*EXECUTE
17 14 11 8 5 2
Практически идентично программе на Алголе-60 по ссылке. Так что Вирт был молодец, упростил язык без потерь в функциональности.