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 Maple 11

Date:06/21/07
Author:Stefan Vorkoetter
URL:http://www.stefanv.com
Comments:0
Info:http://www.maplesoft.com
Score: (2.96 in 94 votes)
module Sing()
    local initialSize, what, where, bottles, action, ModuleApply;

    bottles := proc( n::integer, { lowercase::truefalse := false } )
	option remember;
	if n < 0 then
	    bottles(initialSize)
        elif n = 0 then
	    if lowercase then
		StringTools:-LowerCase(procname(n))
	    else
		"No more bottles"
	    fi
	elif n = 1 then
	    "1 bottle"
	else
	    "" || n || " bottles"
	fi
    end;

    action := proc( n::integer )
        if n = 0 then
	    "Go to the store and buy some more"
	else
	    "Take one down and pass it around"
	fi
    end;

    what := " of beer";
    where := " on the wall";

    ModuleApply := proc( packSize::integer := 99 )
        local n;
	initialSize := packSize;
	for n from initialSize to 0 by -1 do
	    printf("%s%s%s, %s%s.\n",
	    	   bottles(n),what,where,bottles(n,lowercase),what);
	    printf("%s, %s%s%s.\n",action(n),bottles(n-1,lowercase),what,where);
	    if n > 0 then
	        printf("\n")
	    fi
	od
    end
end;

Sing();

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: