(def beer (x)
(with (y t z x)
(while (is y t)
(do
(prn (if (is x 0) "No more" x)
" bottle" ; *** here the error
(if (is x 1) "" "s")
" of beer on the wall, "
(if (is x 0) "no more" x)
" bottle"
(if (is x 1) "" "s")
" of beer!")
(if (is x 0)
(do
(prn "Go to the store and buy some more, "
z " bottle" (if (is z 1) "" "s")
" of beer on the wall!")
(= y nil))
(prn "You take one down, pass it around, "
(if (is (- x 1) 0) "no more" (- x 1))
" bottle" (if (is (- x 1) 1) "" "s")
" of beer on the wall!"))
(prn)
(= x (- x 1))))))
I found a site that lists "99 bottles" programs in 1000 languages, but they don't correct for proper grammar and they don't accept inputs that aren't 99. One guy wrote a shorter 99 bottles program in Arc but it used more high-level functions than mine did.
I can't think of a language that could do the proper grammar, accepting any initial # of bottles, with fewer tokens than Arc.
#\x is just the character literal for the letter x -- each element of a string being a character. What the parent means is that you forgot to put a quotation mark before the mentioned line. You don't need to use #\ in this context, but in writing it makes more sense than saying you forgot a " before bottle".