99 бутылок: Оберон-2, Ox
17. Ox («Окс») — объектно-ориентированный язык с обширными математическими и статистическими библиотеками. Например, в языке, напрямую, можно перемножать две матрицы или производить инверсию. К другим особенностям можно отнести способность языка импортировать некоторые распространённые форматы данных. Например, такие типы, как in7, xls, wks, dht, fmt, можно сразу прочитать в матрицу. Синтаксис Ox, по утверждению авторов, похож на языки Си, Си++ и Java. Интерпретаторы и трансляторы в Си этого языка существуют под Windows, MS DOS, Linux, SunOS, Dec-Unix, Irix, HP-UX и IBM AIX. Лично я пользовался бесплатным консольным интерпретатором версии 2.20 под Windows.
Программа на языке Ox.
// Beer song. Written by Evgeny Stepanischev
#include <oxstd.h>
printbeer (const beer)
{
print (beer?beer:"No", " bottle", beer-1?"s":"");
}
main()
{
decl beer;
for (beer = 99; beer > 0;)
{
printbeer (beer);
print(" on the wall, ");
printbeer (beer);
print (".\nTake one and pass it around,\n");
beer--;
printbeer (beer);
print (" on the wall.\n\n");
}
print ("No more bottles of beer...\n",
"Go to the store and buy some more...\n",
"99 bottles of beer.");
}
16. Oberon-2. Язык Оберон был создан автором Паскаля и Модулы-2 Никлаусом Виртом в 1987 году. В 1992 году Вирт и Ханспетер Мёссенбёк добавили в язык ряд новых средств. Так родился Оберон-2.
Считается, что язык это крайне простой и аскетичный. Лично мне он не понравился. Уж не знаю чем. Впечатлил меня транслятор. Использовал я JOB v0.75 С.Свердлова. Интересен он тем, что переводит программу на Оберон-2 в байт-коды Java, т. е. файл с расширением .class, который, в свою очередь, можно запустить на любой Java-машине.
Отсюда и, встречающиеся в листинге, строчки «javalang» и «javalang.PString». Думаю, транслятор этот пригодится Pascal-ориентированным программистам, которым понадобилось написать пару апплетов или классов Java.
Программа, выводящая песню о пиве (Oberon-2).
(* Beer song. Written by Stepanischev E.V.*)
MODULE Beer;
IMPORT javalang, Out;
PROCEDURE PrintBeer( n : INTEGER );
BEGIN
IF n#0 THEN Out.Int (n,1) ELSE Out.String ("No") END;
Out.String (" bottle");
IF n#1 THEN Out.Char ("s"); END;
Out.String (" of beer");
END PrintBeer;
PROCEDURE main*( VAR args : ARRAY OF javalang.PString );
VAR beer: INTEGER;
BEGIN
Out.Open;
FOR beer:=99 TO 1 BY -1 DO
PrintBeer (beer);
Out.String(" on the wall,");
PrintBeer (beer); Out.Char ("."); Out.Ln;
Out.String ("Take one and pass it around,"); Out.Ln;
PrintBeer (beer-1);
Out.String (" on the wall."); Out.Ln; Out.Ln;
END;
Out.String ("No more bottles of beer..."); Out.Ln;
Out.String ("Go to the store and buy some more..."); Out.Ln;
Out.String ("99 bottles of beer.");
END main;
END Beer.