Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

99 бутылок: Эллочка

58. Эллочка. Мне написал автор языка программирования «Эллочка» с предложением написать на нём «99 бутылок…», как вы знаете, у меня есть хобби — писать такие программы на разных языках.

Для этого языка есть единственный, авторский интерпретатор под ДОС (и очень важно использовать в файле программы символы перевода ДОС/Виндоуз, иначе ничего не будет работать), а сам язык напоминает странноватый Бейсик, без поддержки функций и процедур. Их можно эмулировать, используя трюк со специальной переменной «@», которая содержит номер текущей строки.

В языке есть ряд интересных возможностей, но их затмевают недостатки разного калибра, что характерно для языков без сообщества. Даже в таком простом примере мне пришлось побороться за работоспособность программы. Например, перед числами зачем-то всегда выводится символ табуляции (я его срезаю функцией %MID), а когда вывод достигает размера экрана (80×25), то прокрутки не происходит, программа просто жалуется, что «операция не позволяется» (поэтому я просто жду нажатия клавиши после каждой итерации и очищаю экран).

!99 beer song by Evgeny Stepanischev
!Used variables: B, R, $1
B=99
@cycl
    R=@+2 
    goto @beer
    list ' of beer on the wall, '
    R=@+2
    goto @beer
    list '.'\
    list 'Take one down and pass around'\
    decr B
    R=@+2
    goto @beer
    list ' of beer on the wall.'\
    list ''\
    wait
    clsc
esli B >> 0; @cycl
list 'No more bottles of beer on the wall, no more bottles of beer.'\
list 'Go to the store and buy some more, 99 bottles of beer on the wall.'
exit
@beer
esli B >> 0; +3\
list 'No bottles'
goto R
esli B == 1; +5\
$1=B
$1=%MID($1,2,10)
list $1+' bottles'
goto R
list '1 bottle'
goto R
1 комментарий
erichware.name 2016

Здравствуйте!
Я очень рад, что у Вас получилось решение данной задачи. Что касается описанных недостатков языка, то все не идеально! :)
Однако, замечу, что перед цифрами выводится не знак табуляции, а просто пробел вместо пропущенного знака «+», для отрицательных чисел пробелов нет.
Прокрутки экрана нет, потому что под ДОС все равно нельзя было вернуть на экран то, что ушло наверх, так какой смысл поднимать туда содержимое экрана?
Разумеется, язык давно надо переделать в подоконный вариант, но до этого у меня руки не дошли и уже вряд ли дойдут. Тем более, что актуальность языка, увы, давно пропала. Но я сам и сейчас использую некоторые свои утилиты на этом языке. А трансляторы языка brainfuck, написанные на Эллочке, и вовсе считаю большим успехом.
Но к сожалению, на Вин8 досовские программы не запускаются без специального эмулятора, так что, возможно, мне все же придется писать подоконную версию. Лично мне этот язык все же пока нужен.

Желаю успехов!