99 бутылок: KiXtart, Omens
25. Omens (Object manageMENt System). Язык, сочетающий в себе черты Cи, Cи++ и Java. Например, конструкции он унаследовал от Си, принципы работы с указателями и ссылками — из Си++, а описания классов — из Java.
В данный момент язык и система разработки (компилятор в платформо-независимый байткод и интерпретатор) находятся в стадии бета-тестирования. Наверное, поэтому циклы for и while интерпретатор (даже в файлах примеров) выполнять отказался из-за чего мне пришлось использовать рекурсию.
Сам Omens разрабатывался, как платформонезависимая среда со встроенным облегченным механизмом описания и манипулирования сложными данными, в том числе и с базами данных (DB2, Oracle, MS SQL, dBASE, MS Access, …). Из интересных особенностей — у программы может быть несколько точек входа.
Программа, выводящая песню о пиве (beer.oms)
// Beer song. Written by Evgeny Stepanischev
class beer {
private void PrintBeer(byte n) {
if (n>0)
system.out.print(lang.ltoa(n)); else
system.out.print("No");
system.out.print(" bottle");
if (n!=1) system.out.print("s");
}
private void For(byte i) {
PrintBeer(i);
system.out.print(" on the wall, ");
PrintBeer(i);
system.out.print(" of beer.");
system.out.println("Take one and pass around,\n");
PrintBeer(i-1);
system.out.print(" on the wall.\n\n");
if (i>1) For(i-1);
}
public void main() {
For(99);
system.out.print("No more bottles of beer...");
system.out.println("Go to the store and buy some more...");
system.out.println("99 bottles of beer.");
}
};
24. KiXtart. Язык пакетных файлов. Достаточно простой, наглядный и функциональный. Интересны конструкции вывода на экран и принципы построения функций. Функции (точнее подпрограммы) можно строить при помощи блока Function или, как в BASIC’е, через GOSUB и метки. Что мне понравилось — KiXtart предоставляет большую свободу в форме записи. Так, например, операторы можно разделять переводом строки, табуляциями, пробелами.
Скрипт, выводящий песню о пиве (beer.kix)
; Beer song. Written by Evgeny Stepanischev
Function Beer($n)
If $n
$n
Else
"No"
Endif
" bottle"
If $n<>1 "s" Endif
EndFunction
FOR $beer = 99 TO 1 STEP -1
Beer ($beer) " on the wall, "
Beer ($beer) " of beer."
? "Take one and pass around,"
? Beer ($beer-1)
" on the wall."??
NEXT
"No more bottles of beer..." ?
"Go to the store and buy some more..." ?
"99 bottles of beer."