[m-rev.] diff: Add 99 bottles of beer sample
paul at bone.id.au
Fri Nov 20 16:57:44 AEDT 2015
Add 99 bottles of beer sample
Add this sample.
I found the original version of this sample on 99-bottles-of-beer.net.
I've updated it, _tried_ to post a comment to 99-bottles-of-beer.net,
added it to rosetta code and thought, being a small example, that it
should also belong here.
samples/beer.m | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
create mode 100644 samples/beer.m
diff --git a/samples/beer.m b/samples/beer.m
new file mode 100644
@@ -0,0 +1,61 @@
+% file: beer.m
+% Fergus Henderson <fjh at cs.mu.oz.au> Thursday 9th November 1995
+% Re-written with new syntax standard library calls:
+% Paul Bone <paul at mercurylang.org> 2015-11-20
+% This beer song is more idiomatic Mercury than the original, I feel bad
+% saying that since Fergus is a founder of the language.
+:- module beer.
+:- import_module io.
+:- pred main(io::di, io::uo) is det.
+:- import_module int.
+:- import_module list.
+:- import_module string.
+ beer(99, !IO).
+:- pred beer(int::in, io::di, io::uo) is det.
+beer(N, !IO) :-
+ io.write_string(beer_stanza(N), !IO),
+ ( N > 0 ->
+ beer(N - 1, !IO)
+:- func beer_stanza(int) = string.
+beer_stanza(N) = Stanza :-
+ ( N = 0 ->
+ Stanza = "Go to the store and buy some more!\n"
+ NBottles = bottles_line(N),
+ N1Bottles = bottles_line(N - 1),
+ Stanza =
+ NBottles ++ " on the wall.\n" ++
+ NBottles ++ ".\n" ++
+ "Take one down, pass it around,\n" ++
+ N1Bottles ++ " on the wall.\n"
+:- func bottles_line(int) = string.
+ ( N = 0 ->
+ "No more bottles of beer"
+ ; N = 1 ->
+ "1 bottle of beer"
+ string.format("%d bottles of beer", [i(N)])
More information about the reviews