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.