Language X10 1.7
(IBM language for DARPA HPCS)
| Date: | 05/04/10 |
| Author: | James LaGrone |
| URL: | n/a |
| Comments: | 0 |
| Info: | http://x10.codehaus.org/ |
| Score: |
/***********************************************************************
* X10 implementation of "99 bottles of beer"
*
* by James LaGrone (with a few ideas from the Chapel version)
*
* compiles and runs with x10 compiler version 1.7.7 with Java backend
*
* x10c -commandlineonly NinetyNineBottles.x10
*
***********************************************************************/
public class NinetyNineBottles{
public static def main(args: Rail[String]){
val beerSong: NinetyNineBottles = NinetyNineBottles.make(99);
beerSong.create();
beerSong.sing();
}
var numVerses: Int;
var verses: Array[String]{rank==1};
var bottles: Int;
public static def make(var numBottles: Int){
val s = new NinetyNineBottles();
s.numVerses = numBottles + 1;
val verses: Region{rank==1} = [1..s.numVerses];
s.verses = Array.make[String](verses, (Point) => new String());
s.bottles = numBottles;
return s;
}
public def create(){
finish ateach ( (p):Point in verses ){
val wallCount = bottles - p + 1;
verses(p) = createVerse( p ) ;
}
return;
}
public def sing(){
for ( (p):Point in verses ){
Console.OUT.println(verses(p));
}
return;
}
public def createVerse(var verseNum: Int): String{
val lineA:String,
lineB:String;
val wallCount = bottles - (verseNum - 1);
val nextWallCount = (wallCount + numVerses - 1)%numVerses;
if (wallCount > 0) {
lineA = line(wallCount);
lineB = lineA;
}else{
lineA = "No " + line(wallCount);
lineB = "no " + line(wallCount);
}
return lineA + " on the wall, " + lineB + ".\n" +
action(wallCount) + line(nextWallCount) + " on the wall.\n";
}
public static def line(val numBottles:Int):String{
switch(numBottles){
case 0: return "more bottles of beer";
case 1: return numBottles + " bottle of beer";
default: return numBottles + " bottles of beer";
}
}
public static def action(val numBottles:Int):String{
if (numBottles==0)
return "Go to the store and buy some more, ";
else
return "Take one down and pass it around, ";
}
}
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