99 бутылок: RW1, Euphoria
28. RW1. Язык используется в основном для программирования виртуальных роботов, между которыми проводятся такие же виртуальные бои.
В языке есть возможность описания пользовательских функций, но я не смог ими воспользоваться
О самом интерпретаторе. Программы прекомпилируются в собственную систему
И, наконец, что касается вечного цикла в конце. Программы на языке RW1 (по крайней мере, что касается описания роботов, представляет собой зацикленную программу и вечный цикл нужен для того, что бы программа не начала выполняться заново.
Скрипт, выводящий песню о пиве (beer.rw1)
% Written by Evgeny Stepanischev
ROBOT "Beer"
AUTHOR "Evgeny Stepanischev"
main()
{
beer=99
while(beer>0)
{
IF(beer>1) SAY "&BEER bottles of beer on the wall, &BEER bottles of beer."
ELSE SAY "&BEER bottle of beer on the wall, &BEER bottle of beer."
SAY "Take one down, pass it around."
beer = beer-1
IF(beer>1) SAY "&BEER bottles of beer on the wall."
ELSE
{
IF(beer) SAY "&BEER bottle of beer on the wall."
ELSE SAY "No bottles of beer on the wall."
}
SAY ""
}
SAY "No more bottles of beer..."
SAY "Go to the store and buy some more..."
SAY "99 bottles of beer."
WHILE(1)
{
}
}29. Euphoria. Очень интересный язык с возможностью оперирования списками, как базовыми типами. Например, их можно складывать, сравнивать и вообще производить любые операции, как над атомарными типами. Единственное, что для меня оказалось странным, это тот факт, что атомарные типы не являются частным случаем списков (последовательностей).
В общем не знаю чем, но язык мне понравился. :) Кстати, в языке, насколько я понимаю, есть разница между операция «запятая» (разделение элементов в списке) и «запятая с пробелом» (разделение аргументов функции). Свое предположение я не проверял (а описание читал очень бегло), но, если будете писать программы на этом языке, будьте осторожны с запятой.
Для этого языка существуют интерпретаторы под DOS, Windows и Linux, а так же транслятор в язык Си. Описание языка распространяется вместе с интерпретатором.
Программа, выводящая песню о пиве (beer.ex)
-- Written by Evgeny Stepanischev
integer beer
beer = 99
procedure PrintBeer (integer b)
if b then
printf (1, "%d", b)
else
puts (1, "No")
end if
puts (1, " bottle")
if b!=1 then puts (1, 's') end if
end procedure
while beer>0 do
PrintBeer(beer) puts (1, " of beer on the wall, ")
PrintBeer(beer) puts (1, " of beer.\n")
puts (1, "Take one down, pass it around.\n")
beer = beer - 1
PrintBeer(beer) puts (1, " of beer on the wall.\n\n")
end while
puts (1, "No more bottles of beer...\n")
puts (1, "Go to the store and buy some more...\n")
puts (1, "99 bottles of beer.")