Voting

Category

real language

Bookmarking

Del.icio.us Digg Diigo DZone Earthlink Google Kick.ie
Windows Live LookLater Ma.gnolia Reddit Rojo StumbleUpon Technorati

Language L

(The L Programming Language)

Date:05/09/11
Author:Degory Wilkinson
URL:http://l-lang.net
Comments:0
Info:http://l-lang.net/compiler/
Score: (2.00 in 2 votes)
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<Bottl&#8203;e&#8203;>&#8203;(&#8203;)&#8203;;&#8203;

              // add ninety nine bottle o&#8203;b&#8203;j&#8203;e&#8203;c&#8203;t&#8203;s&#8203;
&#8203;t&#8203;o&#8203; &#8203;w&#8203;a&#8203;l&#8203;l&#8203;
&#8203;c&#8203;o&#8203;n&#8203;t&#8203;a&#8203;i&#8203;n&#8203;e&#8203;r&#8203;:&#8203;
              foreach var i; 1..99 do
                wall.add(new Bottle(i));
              od

              // enumerate the bottle obj&#8203;e&#8203;c&#8203;t&#8203;s&#8203;
&#8203;i&#8203;n&#8203; &#8203;r&#8203;e&#8203;v&#8203;e&#8203;r&#8203;s&#8203;e&#8203;
&#8203;o&#8203;r&#8203;d&#8203;e&#8203;r&#8203;,&#8203;
&#8203;r&#8203;e&#8203;m&#8203;o&#8203;v&#8203;i&#8203;n&#8203;g&#8203;
&#8203;a&#8203;n&#8203;d&#8203;
              // printing each one in tur&#8203;n&#8203;:&#8203;
              foreach var bottle; new
Pop&#8203;G&#8203;e&#8203;n&#8203;e&#8203;r&#8203;a&#8203;t&#8203;o&#8203;r&#8203;<&#8203;B&#8203;o&#8203;t&#8203;t&#8203;l&#8203;e&#8203;>&#8203;(&#8203;w&#8203;a&#8203;l&#8203;l&#8203;)&#8203;
&#8203;d&#8203;o&#8203;
                Std.out.println(bottle);
              od

            catch Exception e
              Std.out.println( "Too drunk&#8203; &#8203;t&#8203;o&#8203;
&#8203;s&#8203;i&#8203;n&#8203;g&#8203;
&#8203;a&#8203;n&#8203;y&#8203;m&#8203;o&#8203;r&#8203;e&#8203;"&#8203; &#8203;)&#8203;;&#8203;

            finally
              Std.out.println( "No more b&#8203;o&#8203;t&#8203;t&#8203;l&#8203;e&#8203;s&#8203;
&#8203;o&#8203;f&#8203; &#8203;b&#8203;e&#8203;e&#8203;r&#8203; &#8203;o&#8203;n&#8203;
&#8203;t&#8203;h&#8203;e&#8203; &#8203;w&#8203;a&#8203;l&#8203;l&#8203;,&#8203;
&#8203;n&#8203;o&#8203; &#8203;m&#8203;o&#8203;r&#8203;e&#8203;
&#8203;b&#8203;o&#8203;t&#8203;t&#8203;l&#8203;e&#8203;s&#8203; &#8203;o&#8203;f&#8203;
&#8203;b&#8203;e&#8203;e&#8203;r&#8203;"&#8203; &#8203;)&#8203;;&#8203;
              Std.out.println( "Go to the&#8203; &#8203;s&#8203;t&#8203;o&#8203;r&#8203;e&#8203;
&#8203;a&#8203;n&#8203;d&#8203; &#8203;b&#8203;u&#8203;y&#8203;
&#8203;s&#8203;o&#8203;m&#8203;e&#8203; &#8203;m&#8203;o&#8203;r&#8203;e&#8203;.&#8203;
&#8203;9&#8203;9&#8203; &#8203;b&#8203;o&#8203;t&#8203;t&#8203;l&#8203;e&#8203;s&#8203;
&#8203;o&#8203;f&#8203; &#8203;b&#8203;e&#8203;e&#8203;r&#8203; &#8203;o&#8203;n&#8203;
&#8203;t&#8203;h&#8203;e&#8203; &#8203;w&#8203;a&#8203;l&#8203;l&#8203;"&#8203;
&#8203;)&#8203;;&#8203;
            yrt
        si
    si

    // Bottle class represents one line i&#8203;n&#8203; &#8203;t&#8203;h&#8203;e&#8203;
&#8203;s&#8203;o&#8203;n&#8203;g&#8203;:&#8203;
    class Bottle is
        int number;

        void init(int number) is
            this.number = number;
        si

        // return the lyric for this bott&#8203;l&#8203;e&#8203;:&#8203;
        get String AsString is
            var o = "";
            var s = "s"; // plural suffix&#8203;
            var p = "";  // bottle phrase&#8203;

            var next = number - 1; // nex&#8203;t&#8203;
&#8203;d&#8203;e&#8203;s&#8203;c&#8203;e&#8203;n&#8203;d&#8203;i&#8203;n&#8203;g&#8203;
&#8203;b&#8203;o&#8203;t&#8203;t&#8203;l&#8203;e&#8203;
&#8203;n&#8203;u&#8203;m&#8203;b&#8203;e&#8203;r&#8203;

            if number == 1 then
                o = "only ";
            fi

            // figure out phrase and bott&#8203;l&#8203;e&#8203;
&#8203;s&#8203;u&#8203;f&#8203;f&#8203;i&#8203;x&#8203;:&#8203;
            case next
            is 0:
                s = ""; // no plural suff&#8203;i&#8203;x&#8203; &#8203;a&#8203;s&#8203;
&#8203;b&#8203;o&#8203;t&#8203;t&#8203;l&#8203;e&#8203;
&#8203;n&#8203;u&#8203;m&#8203;b&#8203;e&#8203;r&#8203; &#8203;i&#8203;s&#8203; &#8203;1&#8203;
                p = "no more bottles";
            is 1:
                p = "only 1 bottle";     &#8203; &#8203; &#8203; &#8203; &#8203; &#8203; &#8203;
&#8203;
            default:
                p = "" + next + " bottles&#8203;"&#8203;;&#8203; &#8203; &#8203; &#8203; &#8203;
&#8203; &#8203; &#8203; &#8203; &#8203; &#8203; &#8203; &#8203;
            esac

            return 
                ("%% bottle% of beer on t&#8203;h&#8203;e&#8203;
&#8203;w&#8203;a&#8203;l&#8203;l&#8203;,&#8203; &#8203;%&#8203;%&#8203;
&#8203;b&#8203;o&#8203;t&#8203;t&#8203;l&#8203;e&#8203;%&#8203; &#8203;o&#8203;f&#8203;
&#8203;b&#8203;e&#8203;e&#8203;r&#8203;\&#8203;n&#8203;"&#8203; &#8203;+&#8203;
                "Take one down and pass i&#8203;t&#8203;
&#8203;a&#8203;r&#8203;o&#8203;u&#8203;n&#8203;d&#8203;,&#8203; &#8203;%&#8203;
&#8203;o&#8203;f&#8203; &#8203;b&#8203;e&#8203;e&#8203;r&#8203; &#8203;o&#8203;n&#8203;
&#8203;t&#8203;h&#8203;e&#8203; &#8203;w&#8203;a&#8203;l&#8203;l&#8203;"&#8203;)&#8203;
&#8203;%&#8203;
                    { o.UpperFirst, numbe&#8203;r&#8203;,&#8203; &#8203;s&#8203;,&#8203;
&#8203;o&#8203;,&#8203; &#8203;n&#8203;u&#8203;m&#8203;b&#8203;e&#8203;r&#8203;,&#8203;
&#8203;s&#8203;,&#8203; &#8203;p&#8203; &#8203;}&#8203;;&#8203;
        si
    si

    // This class iterates over the conte&#8203;n&#8203;t&#8203;s&#8203; &#8203;o&#8203;f&#8203;
&#8203;a&#8203;
&#8203;G&#8203;e&#8203;n&#8203;e&#8203;r&#8203;i&#8203;c&#8203;.&#8203;V&#8203;e&#8203;c&#8203;t&#8203;o&#8203;r&#8203;,&#8203;
    // removing and returning each elemen&#8203;t&#8203; &#8203;i&#8203;n&#8203;
&#8203;r&#8203;e&#8203;v&#8203;e&#8203;r&#8203;s&#8203;e&#8203;
&#8203;o&#8203;r&#8203;d&#8203;e&#8203;r&#8203;:&#8203;
    class PopGenerator<T> isa Generator<T&#8203;>&#8203; &#8203;i&#8203;s&#8203;
        Vector<T> vector;

        void init(Vector<T> v) is
            super.init();
            vector = v;
        si

        void loop() is
            while vector.Length > 0 do
                yield(vector.pop());
            od
        si
    si
si

Download Source | Write Comment

Alternative Versions

Comments

Download Source | Write Comment

Add Comment

Please provide a value for the fields Name, Comment and Security Code.
This is a gravatar-friendly website.
E-mail addresses will never be shown.
Enter your e-mail address to use your gravatar.

Please don't post large portions of code here! Use the form to submit new examples or updates instead!

Name:

eMail:

URL:

Security Code:
  
Comment: