namespace Beer is use System.Object; use System.String; use System.Exception; use System.StringBuffer; use Generic.Vector; use Generic.Generator; use IO.Std; // L programming language 99 bottles ​o​f​ ​b​e​e​r​ ​e​x​a​m​p​l​e​,​ ​O​O​P​ ​v​e​r​s​i​o​n​.​ class Main is void init() is try // create an ordered contai​n​e​r​ ​f​o​r​ ​t​h​e​ ​b​o​t​t​l​e​s​:​ var wall = new Vector​(​)​;​ // add ninety nine bottle o​b​j​e​c​t​s​ ​t​o​ ​w​a​l​l​ ​c​o​n​t​a​i​n​e​r​:​ foreach var i; 1..99 do wall.add(new Bottle(i)); od // enumerate the bottle obj​e​c​t​s​ ​i​n​ ​r​e​v​e​r​s​e​ ​o​r​d​e​r​,​ ​r​e​m​o​v​i​n​g​ ​a​n​d​ // printing each one in tur​n​:​ foreach var bottle; new Pop​G​e​n​e​r​a​t​o​r​<​B​o​t​t​l​e​>​(​w​a​l​l​)​ ​d​o​ Std.out.println(bottle); od catch Exception e Std.out.println( "Too drunk​ ​t​o​ ​s​i​n​g​ ​a​n​y​m​o​r​e​"​ ​)​;​ finally Std.out.println( "No more b​o​t​t​l​e​s​ ​o​f​ ​b​e​e​r​ ​o​n​ ​t​h​e​ ​w​a​l​l​,​ ​n​o​ ​m​o​r​e​ ​b​o​t​t​l​e​s​ ​o​f​ ​b​e​e​r​"​ ​)​;​ Std.out.println( "Go to the​ ​s​t​o​r​e​ ​a​n​d​ ​b​u​y​ ​s​o​m​e​ ​m​o​r​e​.​ ​9​9​ ​b​o​t​t​l​e​s​ ​o​f​ ​b​e​e​r​ ​o​n​ ​t​h​e​ ​w​a​l​l​"​ ​)​;​ yrt si si // Bottle class represents one line i​n​ ​t​h​e​ ​s​o​n​g​:​ class Bottle is int number; void init(int number) is this.number = number; si // return the lyric for this bott​l​e​:​ get String AsString is var o = ""; var s = "s"; // plural suffix​ var p = ""; // bottle phrase​ var next = number - 1; // nex​t​ ​d​e​s​c​e​n​d​i​n​g​ ​b​o​t​t​l​e​ ​n​u​m​b​e​r​ if number == 1 then o = "only "; fi // figure out phrase and bott​l​e​ ​s​u​f​f​i​x​:​ case next is 0: s = ""; // no plural suff​i​x​ ​a​s​ ​b​o​t​t​l​e​ ​n​u​m​b​e​r​ ​i​s​ ​1​ p = "no more bottles"; is 1: p = "only 1 bottle"; ​ ​ ​ ​ ​ ​ ​ ​ default: p = "" + next + " bottles​"​;​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ esac return ("%% bottle% of beer on t​h​e​ ​w​a​l​l​,​ ​%​%​ ​b​o​t​t​l​e​%​ ​o​f​ ​b​e​e​r​\​n​"​ ​+​ "Take one down and pass i​t​ ​a​r​o​u​n​d​,​ ​%​ ​o​f​ ​b​e​e​r​ ​o​n​ ​t​h​e​ ​w​a​l​l​"​)​ ​%​ { o.UpperFirst, numbe​r​,​ ​s​,​ ​o​,​ ​n​u​m​b​e​r​,​ ​s​,​ ​p​ ​}​;​ si si // This class iterates over the conte​n​t​s​ ​o​f​ ​a​ ​G​e​n​e​r​i​c​.​V​e​c​t​o​r​,​ // removing and returning each elemen​t​ ​i​n​ ​r​e​v​e​r​s​e​ ​o​r​d​e​r​:​ class PopGenerator isa Generator​ ​i​s​ Vector vector; void init(Vector v) is super.init(); vector = v; si void loop() is while vector.Length > 0 do yield(vector.pop()); od si si si