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

99 бутылок: Miva, Ruby

23. Ruby. Скриптовый язык, который я посчитал очень похожим на Перл, поэтому писал на нём как на Перле. Отличия есть, и существенные, но тем не менее. Как и предыдущем языке, есть префиксные различия между глобальными (начинаются на «$» или «@») и локальными переменными. Из странностей — конструкцию «1?2:3» не удалось заставить работать с локальными переменными. Возможно это особенность языка, но не ясен её смысл.

Скрипт, выводящий песню о пиве.

# Beer song. Written by Evgeny Stepanischev

def Beer (n)
  if n!=0 then
    print n
  else
    print 'No'
  end

  print " bottle"
  print "s" unless n==1
end

$i = 99

while $i>0 do
  Beer ($i)
  print " on the wall, "
  Beer ($i)
  print "\nTake one and pass around,\n"
  $i-=1;
  Beer ($i)
  print " on the wall.\n\n"
end

print <<EOF
No more bottles of beer...
Go to the store and buy some more...
99 bottles of beer.
EOF


22. Miva. Доступ к этому языку я получил чисто случайно. Будем считать, что я нашел распечатки парочки программ на этом языке на улице. Это недалеко от истины, ибо документацию по Miva я в глаза не видел.

Итак Miva — это скриптовый полнофункциональный язык, применяемый исключительно в веб-программировании. Синтаксис, на мой взгляд, несколько неуклюж, что, впрочем, легко объяснимо способом его внедрения, и неоправданно многословен. Из интересных особенностей — разделение локальных, глобальных и системных (?) переменных через объекты «l», «g» и «s».

Скрипт, выводящий песню о пиве (beer.mv)

<HTML><MIVA STANDARDOUTPUTLEVEL = "text, html, compresswhitespace">

<MvCOMMENT>
| Beer song. Written by Evgeny Stepanischev
</MvCOMMENT>

<MvFUNCTION NAME="Beer" PARAMETERS="n">
<MvIF EXPR = "{ l.n NE 0 }">&[ l.n ]<MvELSE>No</MvIF>
bottle<MvIF EXPR = "{ l.n NE 1 }">s</MvIF>
of beer</MvFUNCTION>

<MvASSIGN NAME = "g.i" VALUE = 99>

<MvWHILE EXPR = "{ g.i GE 1 }">
<MvEVAL EXPR="{ Beer(g.i) }"> on the wall, <MvEVAL EXPR="{ Beer(g.i) }">.<BR>
Take one and pass around,<BR>
<MvASSIGN NAME = "g.i" VALUE = "{ g.i - 1 }">
<MvEVAL EXPR="{ Beer(g.i) }">
on the wall.<BR><BR>

</MvWHILE>

No more bottles of beer...<BR>
Go to the store and buy some more...<BR>
99 bottles of beer.

</HTML>
2 комментария
Андрей 2012

Хм... Решил эту задачку совсем по-детски :) Но главное для программиста-результат:)

n=99
while n!=0
puts n.to_s+’ бутылок пива на борту ’
puts n.to_s+’ на борту
берешь одну, пускаешь ко дну’
n=n-1
puts n.to_s+’ осталось на борту’
end
puts ’Нет бутылок пива на борту!
Нет бутылок пива!
Пойди в магазин и стяни ещё,
99 бутылок пива на борту!’

Евгений Степанищев (bolknote.ru) 2012

Комментарий для Андрей:

Что заставило вас комментировать заметку, которой 11 лет?