99 Bottles of Beer of the Wall

 Usage: fallsong n for American version starting at n bottles.
        takesong n for British version 
        eM n - general utility which returns english version of n.
 Note: Definition of billion, trillion, etc. follow American usage.
 Limits: Some counting and reporting problems caused by comparison
 tolerance and floating-point numbers above one trillion.
 Absolute limit: Approximately 9.9998354e65, at which point
 floating-point representation becomes unreliable.

ewd1("zero";"one";"two";"three";"four";"five";"six";"seven";"eight";"nine";
  "ten";"eleven";"twelve";"thirteen";"fourteen";"fifteen";"sixteen";
  "seventeen";"eighteen";"nineteen")
ewd10("";"";"twenty";"thirty";"forty";"fifty";"sixty";"seventy";
  "eighty";"ninety"); ewdh" hundred"; ewdc" and ";
epow("";" thousand")," ",("m";"b";"tr";"quadr";"quint";"sext";"sept";
  "oct";"non";"dec";"undec";"duodec";"tredec";"quattuordec";"quindec";
  "sexdec";"septendec";"octodec";"novemdec";"vigint"),<"illion"
eH n:if(20n){(t;xx)0 10n;(tewd10),if(0=xx)""else "-",xxewd1} else newd1
eT n:if(100n){(h;x)0 100n;(hewd1),ewdh,if(0=x)""else ewdc,eH x}else eH n
eM n:{z"";(i#epow)do{(n;x)0 1000n;if(0x)z,(((100>x)^(i=0)^0n)/"and "),
  (eTx),(iepow),((0#z)/", "),z;if(0=n)z};z}
cap str:{n`int1str;if((97n)^122n)str[0]`charn-32;str}
nb n:(if(0n)(cap eM n)else "No more"),((-1=n)" bottles")," of beer"
ootb n:if(1n)"one of those bottles"else"that bottle"
fate{b;n}:{if(b)".\nIf ",(ootb n)," should happen to fall,\n" else 
  ".\nTake ",((1=n)("one";"it"))," down; pass it around,\n"}
b stanza n:{w" on the wall.";(nb n),w,"\n",(nb n),(b fate n),(nb n-1),w,"\n"}
fallsong n:{(in)do 1 stanza n-i;}
takesong n:{(in)do 0 stanza n-i;}