Language Magik
Date: | 03/19/07 |
Author: | Neil Pawson |
URL: | n/a |
Comments: | 1 |
Info: | http://en.wikipedia.org/wiki/Magik_%28programming_language%29 |
Score: | (2.83 in 6 votes) |
## A nice, sturdy wall to put our bottles on def_slotted_exemplar(:wall, { {:num_bottles, _unset}, {:start_bottles, _unset}}, {}) $ ## The number of bottles we started with wall.define_slot_access(:start_bottles, :writable, :private) $ ## The number of bottles we have left wall.define_slot_access(:num_bottles, :writable, :private) $ _method wall.new(start_bottles) ## Create a new wall with START_BOTTLES of beer sitting on it >> _clone.init(start_bottles) _endmethod $ _private _method wall.init(start_bottles) ## Initialise the amount of beer to START_BOTTLES _self.num_bottles << _self.start_bottles << start_bottles >> _self _endmethod $ _private _method wall.no_beer? ## Are there any bottles of beer left? >> _self.num_bottles < 1 _endmethod $ _private _method wall.beer_string(_optional uc_first?) ## Return a string which says how many bottles of beer we have ## left on the wall. ## ## If UC_FIRST? is true and we have no beer left then the first ## letter is capitalised. _if _self.no_beer? _then _if uc_first? _is _true _then num << "No more" _else num << "no more" _endif _else num << _self.num_bottles _endif _if num _isnt 1 _then s << %s _else s << "" _endif >> write_string(num, " bottle", s, " of beer") _endmethod $ _private _method wall.drink_bottle() ## Drink a bottle of beer and show how many we have left _self.num_bottles -<< 1 write("Take one down and pass it around, ", _self.beer_string(), " on the wall.") write() _endmethod $ _method wall.drink_all_beer() ## Drink all the bottles of beer we have on the wall, printing ## out the lyrics on the way. # Drink until dry _loop write(_self.beer_string(_true), " on the wall, ", _self.beer_string(), %.) _if _self.no_beer? _then _leave _endif _self.drink_bottle() _endloop _self.num_bottles << _self.start_bottles write("Go to the store and buy some more, ", _self.beer_string(), " on the wall.") _endmethod $ # Create a new wall stocked with beer, then drink it wall.new(99).drink_all_beer() $
Download Source | Write Comment
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!
Comments
Swetha Prasanna said on 09/23/09 10:31:52
Good..Infact!!
Any other such things from you. I am just eager to see and try.