Пишу, по большей части, про историю, свою жизнь и немного про программирование.

99 бутылок: PasScript, ActionScript

21. ActionScript5. Внутренний язык Flash5. По виду очень похож на JavaScript (если не считать «add», обязательные точки с запятой и прочие мелочи), даже многие предопределенные объекты те же, но по идеологии — нет. Например, как в JavaScript осуществляется доступ к каким-либо внешним сущностям? Через коллекции. В ActionScript доступ происходит по имени.

Из интересных особенностей интерпретатора… ActionScript от версии к версии сильно изменяется. Вплоть до несовместимости. Так вот, если интепретатору подсунуть Flash предыдущей версии, он выполняет все необходимые преобразования в ActionScript за программиста, комментируя все свои действия.

Скрипт, выводящий песню о пиве.

// Beer song. Written by Evgeny Stepanischev

function PrintBeer (i)
{
    return (i?i:'No') add ' bottle' add (i-1?'s':'') add
    ' of beer';
}


for (i = 99; i>0; i--)
{
    trace ((b=PrintBeer (i)) add ' on the wall, ' add b add '.');
    trace ('Take one down and pass it around,');
    trace (PrintBeer (i-1) add ' on the wall.\n');
};

trace ('No more bottles of beer...\n' add
'Go to the store and buy some more...\n' add
'99 bottles of beer.');


20. PasScript. Можно сказать, что это VIRT со всеми присущими ему особенностями и конструкциями (например, «P << [[ 70, 5], <<P]»), только с синтаксисом Object Pascal. Из глюков интерпретатора я заметил нежелание конструкции «for» работать с переменными типов «byte» и «word», плюс конструкция «writeln» сначала печатает перевод строки и только потом —свой параметр.

Скрипт, выводящий песню о пиве (beer.pas)

// Beer song.  Written by Evgeny Stepanischev

program Beer;
procedure PrintBeer( n: byte );
begin
      if n<>0 then write (n)
      else write ('No');

      write (' bottle');
      if n<>1 then write ('s');

      write (' of beer');     
end;

var
  I: integer;

begin
      for I:=99 downto 1 do
      begin
           PrintBeer (I);
           write (' on the wall, ');
           PrintBeer (I);
           write ('.');
           writeln ('Take one and pass around,');
           writeln ();

           PrintBeer (I-1);
           write (' on the wall.');
           writeln ();
           writeln ();
      end;
      write ('No more bottles of beer...');
      writeln ('Go to the store and buy some more...');
      writeln ('99 bottles of beer.')
end.