/* 99 bottles of beer in Prolog Rob van de Pol<EMAIL_ADDRESS>TNO Nutrition and Food Research Institute The Netherlands */ domains count = integer predicates bottles(count) clauses bottles(1) :- write ("1 bottle of beer on the wall, 1 bottle of beer,\n"), write ("Take one down, and pass it around,\n"), write ("Now they are alle gone."). bottles(X) :- write ( X , " bottles of beer on the wall, " , X , " bottles of beer,\n"), write ("Take one down, and pass it around,\n"), X1 = X - 1, write ( X1 , " bottles of beer on the wall.\n", bottles(X1). goal bottles(99)
NROFF
nroff is a text formatting macro language common under UNIX.\" Tim Goodwin<EMAIL_ADDRESS>.nr BO 99 .de BP .if \\n(BO=0 No more .if !\\n(BO=0 \\n(BO .if \\n(BO=1 bottle .if !\\n(BO=1 bottles of beer .. .de WP .BP on the wall .. .de BE .WP .br .BP .br Take one down, pass it around .br .nr BO \\n(BO-1 .WP .sp .if \\n(BO>0 .BE .. .BE
Prograph
Click for more info.
Oberon
MODULE BottlesOfBeers; (* Andrejs Jansons 27.10.95 *) IMPORT Out; PROCEDURE Start*; VAR bottles: INTEGER; BEGIN bottles := 99; REPEAT Out.Int(bottles, 2); Out.String(" bottles of beer on the wall, "); Out.Int(bottles, 2); Out.String(" bottles of beer."); Out.Ln; Out.String("Take one down, pass it around, "); DEC(bottles); Out.Int(bottles, 2); Out.String(" bottles of beer on the wall."); Out.Ln UNTIL bottles = 1; Out.String("1 bottle of beer on the wall, one bottle of beer."); Out.Ln; Out.String("Take one down, pass it around,"); Out.String(" no more bottles of beer on the wall"); Out.Ln END Start; END BottlesOfBeers.This is a noteworty Object Oriented version in Oberon:
MODULE BeerSong; (* An object-oriented beer song in Oberon-2 *) (* Contributed by Michael Griebling<EMAIL_ADDRESS>*) IMPORT O:=Out; TYPE WallObject* = RECORD beer-: SHORTINT END; VAR BeerWall : WallObject; PROCEDURE (VAR wall: WallObject) LineEmUp*; BEGIN wall.beer := 99 END LineEmUp; PROCEDURE (VAR wall: WallObject) PassOneAround*; BEGIN DEC(wall.beer) END PassOneAround; PROCEDURE (VAR wall: WallObject) HasMoreBeer* () : BOOLEAN; BEGIN RETURN wall.beer > 0 END HasMoreBeer; PROCEDURE SingOf(beer: SHORTINT); BEGIN IF beer = 0 THEN O.String("No more") ELSE O.Int(beer, 1) END; O.String(" bottle"); IF beer#1 THEN O.Char("s") END; O.String(" of beer") END SingOf; PROCEDURE (VAR wall: WallObject) SingVerse*; BEGIN SingOf(wall.beer); O.String(" on the wall, "); SingOf(wall.beer); O.Ln; O.String("Take one down and pass it around,"); O.Ln; SingOf(wall.beer-1); O.String(" on the wall."); O.Ln; O.Ln END SingVerse; BEGIN BeerWall.LineEmUp; WHILE BeerWall.HasMoreBeer() DO BeerWall.SingVerse; BeerWall.PassOneAround END END BeerSong.
Pop
define beer(n); define :inline PLURAL(N); (N==1 and nullstring or "s") enddefine; lvars i; for i from n by -1 to 1 do; nl(1); nprintf(PLURAL(i), i, '%P bottle%P of beer on the wall.'); nprintf(PLURAL(i), i, '%P bottle%P of beer!'); nprintf(i==1 and "it" or "one", 'Take %P down, pass it around.'); if i>1 then nprintf(PLURAL(i-1), i-1, '%P more bottle%S of beer on the wall.'); else npr('No more bottles of beer on the wall.'); endif; endfor; enddefine; beer(100);
Progress
Progress is a database system that is used to create enterprise database solutions./* Progress 4GL version of 99 Bottles of Beer. * programmer: Rich Uchytil<EMAIL_ADDRESS>* 10/30/95 */ def var i as int no-undo format "z9". do i = 99 to 1 by -1: disp i "bottles of beer on the wall," skip i @ x as int format "z9" "bottles of beer" skip "Take one down and pass it around," skip i - 1 format "z9" "bottles of beer on the wall." with no-labels no-box no-attr 1 down. pause 1 no-message. /* needed otherwise it would run too fast */ end.
Pilot
R: PILOT version of 99 Bottles of Beer : hacked by Akira KIDA<EMAIL_ADDRESS>C:BOTTLES=99 U:*BEERS *LOOP T:$T of beer on the wall, $T. T:Take one down, pass it around. C:BOTTLES=BOTTLES-1 U:*BEERS T:$T on the wall. T: J(BOTTLES>0):*LOOP E: *BEERS C(BOTTLES=0):$T=No more bottles C(BOTTLES=1):$T=1 bottle C(BOTTLES>1):$T=#BOTTLES bottles E:
PV-Wave
PV-Wave, also known as IDL, is a language designed for visual data analysis.; ; 99 bottles of beer ; V1 ; Author: George M.Sigut<EMAIL_ADDRESS>; ; yes, I DO know the second loop could be unrolled ; ninety_nine = 99 texta = ' bottles of beer' textb = ' bottle of beer' textf = ' no more' ; number1 = strcompress(string(ninety_nine)) text1 = texta number2 = strcompress(string(ninety_nine-1)) text2 = texta for i=ninety_nine,3,-1 do begin &$ print,number1,text1,' on the wall' &$ print,number1,text1 &$ print,' you take one down & pass it around' &$ print,number2,text2 &$ print &$ number1 = number2 &$ number2 = strcompress(string(i-2)) &$ endfor ; text1 = texta text2 = textb for i=2,1,-1 do begin &$ print,number1,text1,' on the wall' &$ print,number1,text1 &$ print,' you take one down & pass it around' &$ print,number2,text2 &$ print &$ number1 = number2 &$ text1 = textb &$ number2 = textf &$ text2 = texta &$ endfor ; ; ---------- Variant more in keeping with the language's style ----- ; ; 99 bottles of beer ; V2 ; ninety_nine = 99 texta = ' bottles of beer' textb = ' bottle of beer' textf = ' no more' ; full_text = strarr(1,4,ninety_nine) ; full_text(0,1,*) = strcompress(string(ninety_nine-indgen(ninety_nine))) + texta full_text(0,0,*) = full_text(0,1,*) + ' on the wall' full_text(0,2,*) = ' you take one down & pass it around' full_text(0,3,0:ninety_nine-2)=full_text(0,1,1:ninety_nine-1) ; full_text(0,3,ninety_nine-2) = strcompress(1)+textb full_text(0,0,ninety_nine-1) = full_text(0,3,ninety_nine-2)+' on the wall' full_text(0,1,ninety_nine-1) = full_text(0,3,ninety_nine-2) full_text(0,3,ninety_nine-1) = textf+texta ; print,full_text ;
Natural
* PGM-ID: BEER * AUTHOR: CHRIS BEDNARA * COMMENT: NATURAL '99 BOTTLES OF BEER ON THE WALL' CODE * *------------------------------------------------------- DEFINE DATA LOCAL 01 #BOTTLES (I2) END-DEFINE * FOR #BOTTLES 99 TO 2 STEP -1 IF #BOTTLES < 98 WRITE #BOTTLES ' BOTTLES OF BEER ON THE WALL' WRITE ' ' END-IF * WRITE #BOTTLES ' BOTTLES OF BEER ON THE WALL' WRITE #BOTTLES ' BOTTLES OF BEER' WRITE 'TAKE ONE DOWN, PASS IT AROUND' END-FOR * WRITE '1 BOTTLE OF BEER ON THE WALL' WRITE ' ' WRITE '1 BOTTLE OF BEER ON THE WALL' WRITE '1 BOTTLE OF BEER' WRITE 'TAKE IT DOWN, PASS IT AROUND' WRITE 'NO MORE BOTTLES OF BEER ON THE WALL' WRITE ' ' WRITE 'NO MORE BOTTLES OF BEER ON THE WALL' WRITE 'NO MORE BOTTLES OF BEER' WRITE 'GO TO THE STORE AND BUY SOME MORE' WRITE '99 BOTTLES OF BEER' END WRITE 'TAKE ONE DOWN, PASS IT AROUND'
NIAL
Nial stands for Nested Interactive Array Language, which incorporates ideas from APL2, Lisp, FP and structured programming. Q'Nial is a Nial programming system developed at Queen's University in Canada Click here for more info.% Nial (Q'Nial) version of 99 bottles of beer %; % loaddef "beer; % beer 99; %; % Hacked by Akira KIDA<EMAIL_ADDRESS>bottles IS OPERATION A { IF A = 0 THEN 'No more bottles' ELSEIF A = 1 THEN link (sketch A) ' bottle' ELSE link (sketch A) ' bottles' ENDIF } beer IS OPERATION A { FOR x WITH reverse count A DO write link (bottles x) ' of beer on the wall, ' (bottles x) '.'; write 'Take one down, pass it around.'; write link (bottles (x - 1)) ' of beer on the wall.'; write ''; ENDFOR; }
OPL
OPL (Organiser Programming Language) is the language used by Psion palmtops.REM ******************************************************************** REM * 99 Bottles of Beer * REM * * REM * A portable version for those who need this vital application * REM * with them at all times. The following is written in Psion OPL, * REM * the language used in the popular Series 3 and Series 3a palmtops * REM * (and other previous Psion products). * REM * * REM * by Dave Wilson<EMAIL_ADDRESS>* REM * * REM ******************************************************************** PROC Main: LOCAL bottles% LOCAL bottle$(10) CLS bottles%=99 bottle$=" bottles" PRINT "99 Bottles of Beer" PRINT WHILE(bottles% > 0) PRINT bottles%;bottle$;" of beer on the wall," PRINT bottles%;bottle$;" of beer on the wall." PRINT "Take one down and pass it around," bottles%=bottles%-1 IF(bottles% = 1) bottle$=" bottle" ENDIF IF(bottles% <> 0) PRINT "There'll be ";bottles%;bottles$;" of beer on the wall." ELSE PRINT "There'll be no bottles of beer on the wall." ENDIF PRINT ENDWH PAUSE 0 ENDP
NEWLIB
NEWLIB is a programming aid that operates as a command processor in the Time Sharing Option (TSO) environment. (Mostly based on PL/I, therefore the similarity.) It is used at DESY/Hamburg and KEK/Tsukuba.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $ 21/02/96 602211216 MEMBER NAME <<EDTCL (SPECTRUM) CLIST $ NEWLIB VERSION OF 99 BOTTLES OF BEER $ R.P.HOFMANN<EMAIL_ADDRESS>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ STORE ESC := '%' DO N0 = 1 TO 99 N1 := 100-%N0 IF N1 > 1 THEN IF N0 > 1 SHOW N1||' BOTTLES OF BEER ON THE WALL' SHOW N1||' BOTTLES OF BEER ON THE WALL' SHOW N1||' BOTTLES OF BEER' ELSE SHOW '1 BOTTLE OF BEER ON THE WALL' SHOW '1 BOTTLE OF BEER ON THE WALL' SHOW '1 BOTTLE OF BEER' ENDIF SHOW 'TAKE 1 DOWN AND PASS IT ALL AROUND' END SHOW '0 BOTTLES OF BEER ON THE WALL' RESTORE
Posix
Posix is yet another U**x shell.#!/bin/sh # POSIX shell version of 99 Bottles # Dave Plonka -<EMAIL_ADDRESS>typeset -i n=99 typeset bottles=bottles typeset no while let n do echo "${n?} ${bottles?} of beer on the wall," echo "${n?} ${bottles?} of beer," echo "take one down, pass it around," n=n-1 case ${n?} in 0) no=no bottles=${bottles%s}s ;; 1) bottles=${bottles%s} ;; esac echo "${no:-${n}} ${bottles?} of beer on the wall." echo done exit
Quick Basic
'99 Bottles of Beer on the Wall 'Patrick Fleming http://chem-www.mps.ohio-state.edu/~pfleming/ CLS n = 100 DO UNTIL n = 1 n = n - 1 PRINT n; "bottle"; IF n <> 1 THEN PRINT "s"; PRINT " of beer on the wall . . ." PRINT n; "bottle"; IF n <> 1 THEN PRINT "s"; PRINT " of beer!" PRINT "Take one down, pass it around . . ." PRINT n - 1; "bottle"; IF n - 1 <> 1 THEN PRINT "s"; PRINT " of beer on the wall!" PRINT LOOP END
Rapid
Rapid is a a prototyping language developed by Emultek. There were several screen shots associated with this, but this one is the most obviously the programming language part of it.
PAL
PAL is Prodigy Application Language. I listed this one as unique simply because you don't often get a peek at a truly proprietary language. This can't be compiled by anyone other than Prodigy employees./*=========================================================================*/ /* */ /* PRODIGY SERVICES COMPANY */ /* */ /* Author: Kim Moser<EMAIL_ADDRESS>*/ /* Application: 99 Bottles of Beer on the Wall */ /* Program Name: XXXXBEER.PGM */ /* Program Type: Element preprocessor */ /* File Name: xxxxbeer.s */ /* Version: 0.0 */ /* Contents: PAL */ /*=========================================================================*/ /* PROGRAM DESCRIPTION: This function fills PEVs 10-110 with 99 verses */ /* of the "99 Bottles of Beer on the Wall" song (one verse per PEV), */ /* appends these verses to the file whose name was given in P1 (the */ /* first parameter), then opens a window warning you to buy more beer. */ /* */ /* The program is smart enough to pluralize "beer" when refering to */ /* more than one, and says "no" when refering to 0 bottles. */ /* */ /* The output is as follows: */ /* 99 bottles of beer on the wall, 99 bottles of beer. */ /* Take one down, pass it around, 98 bottles of beer on the wall. */ /* ... */ /* 1 bottle of beer on the wall, 1 bottle of beer. */ /* Take one down, pass it around, no bottles of beer on the wall. */ /* Time to buy more beer! */ /* */ /*-------------------------------------------------------------------------*/ /* MAINTENANCE LOG: */ /* PROGRAMMER DATE DESCRIPTION OF CHANGE */ /* Kim Moser 23-Oct-96 Creation. */ /*=========================================================================*/ #define DISPLAY_PEV 10 #define Q_CTX_NAME "beer_ctx" context beer_ctx { var ctx_fp, /* File pointer: where to write the song */ ctx_bottle, /* " bottle" */ ctx_bottle_of_beer, /* " bottle of beer" */ ctx_bottles_of_beer, /* " bottles of beer" */ ctx_on_the_wall; /* " on the wall" */ } #define DEFAULT_FNAME "beer.txt" "XXXXBEERPGM\00\0C"(var fname) { var i; var of_beer; var sentence; if (open_one_context(Q_CTX_NAME) > 1) { /* Error opening context */ return (-1); } /* Initialize context: */ /* Reduce string overhead by putting these phrases in variables: */ of_beer = " of beer"; ctx_bottle = " bottle"; ctx_bottle_of_beer = string(ctx_bottle, of_beer); ctx_bottles_of_beer = string(ctx_bottle, "s", of_beer); ctx_on_the_wall = " on the wall"; if (fname ==$ "") { /* No filename specified */ fname = DEFAULT_FNAME; } if (open(fname, F_APPEND, ctx_fp) == 0) { for (i=99; i > 0; i-=1) { sentence = bottles_sentence(i); &0[DISPLAY_PEV + (100-i)] = sentence; write_line(ctx_fp, sentence); } write_line(ctx_fp, "Time to buy more beer!\n"); close(ctx_fp); } close_all_contexts(Q_CTX_NAME); open_window("XXXXBEERWND\00\0E"); /* Warning: Time to buy more beer */ } bottles_sentence(var n_bottles) { var bob1, bob2; /* " bottles of beer" or " bottle of beer" */ bob1 = bob(n_bottles); bob2 = bob(n_bottles - 1); return ( string( n_bottles, bob1, ctx_on_the_wall, ", ", n_bottles, bob1, ".\nTake one down, pass it around, ", (n_bottles-1 ? n_bottles-1 : "no"), bob2, ctx_on_the_wall, "." ) ); } bob(var n_bottles) { return (n_bottles==1 ? ctx_bottle_of_beer : ctx_bottles_of_beer); }
PLEX
PLEX (Programming Language for EXchanges) is a real-time language developed in 1970 by Ericsson to program telephony exchanges.! The main program "99 bottles ..." programmed in PLEX ! ! Programmer Staale Andersen<EMAIL_ADDRESS>! ! Comment: The need for an own parameterlist and a signal survey, ! ! leads to the whole beer program beeing in 3 parts. !   WHEN 2 DO ONWALL2 = " BOTTLE OF BEER ON A WALL.";  The source parameter list ! DOCUMENT BEERSPARAM; BLOCK BEER; TYPE BTBEER; TYPEEXT BTEXTBEER; USE BEERPROGRAM; NSYMB BTBEER = #8000; NSYMB BTEXTBEER= #4000; STRING BEERS = "BEERS"; NSYMB COCA99 = #0; END BLOCK; *END; ID BEERSPARAM TYPE DOCUMENT; CLA 19073; NUM CAA 100 99; REV A; DAT 96-12-13; DES ETO/TX/M/N STA; RES ETO/TX/M/N STA; APP ETO/TX/M/N TV; END ID; ! Signal Survey ! DOCUMENT BEERSURVEY; SIGNALSURVEY; USE BLOCK BEER; STTOR , R , 723/15514 - APZ210 ; STTORRY , S , 724/15514 - APZ210 ; END SIGNALSURVEY; *END; ID BEERSURVEY TYPE DOCUMENT; CLA 15514; NUM CAA 100 99; REV A; DAT 96-12-13; DES ETO/TX/M/N STA; RES ETO/TX/M/N STA; APP ETO/ETOTX/M/N TV; END ID;
OBJ
OBJ is an algebraic specification language.*** OBJ version of 99 bottles of beer *** programmer: Grigore Rosu<EMAIL_ADDRESS>*** creator of OBJ language: Joseph Goguen obj STRING is sort String . ops We like some beer on the wall. : -> String . ops Take one bottle of wall down , : -> String . ops And pass it arround the beer. : -> String . ops Does anybody want bottles more? : -> String . endo obj LIST[X :: TRIV] is sort List . subsort Elt < List . op __ : List List -> List [assoc] . endo make CHUG is LIST [ STRING + NAT ] endm obj BEER is protecting CHUG . subsort Nat < String . ops beers puke : Nat -> List . op bottle? : Nat -> String . var N : Nat . eq beers(0) = Does anybody want some more? . cq beers(N) = puke(N) beers(p N) if N > 0 . eq puke(N) = N bottle?(N) of beer on the wall , N bottle?(N) of beer. Take one down , pass it arround , (p N) bottle?(p N) of beer on the wall. . cq bottle?(N) = bottle if N == 1 . cq bottle?(N) = bottles if N =/= 1 . endo red beers(99) .
POV-Ray
POV-Ray is a ray-tracing program.// povray 3 file for the 99 bottles of beer ... #declare S1 = " bottles" #declare L1 = " of beer on the wall,\n" #declare L2 = " of beer.\n" #declare L3 = "Take one down and pass it around,\n" #declare L4 = " of beer on the wall.\n\n" #declare Beer = 99 #declare S2 = concat(str(Beer,0,0),S1) #render "\n" #while (Beer > 0) #render concat(S2,L1) #render concat(S2,L2) #render L3 #declare Beer = Beer - 1 #if (Beer = 1) #declare S2 = "1 bottle" #else #if (Beer = 0) #declare S2 = "No more bottles" #else #declare S2 = concat(str(Beer,0,0),S1) #end #end #render concat(S2,L4) #end sphere { 0, 1 pigment { colour rgb <1,0,0> } } light_source { x*2, colour rgb 1 } camera { perspective location x*2 look_at 0 }
Orthogonal
; 99 Bottles of Beer on the Wall ; for Orthogonal ; written by Brian Raiter 5/96 :set bX = 7 :set bY = 20 [0,0] 99 1 cw 0 cw 0 ':' 'd' 'n' 'u' 'o' 'r' ' ' 't' 'i' ' ' cw 99 cw 0 ':' 'e' 'r' 'o' 'm' ' ' 'e' 'm' cw 's' 1 ? 'o' 's' 99 ! 's' 'a' cw J c 0 cw ? c 0 s '.' 0 ccw ? s ' ' ccw 'p' ~ d cw ' ' J 0 d s ';' ' ' 0 cw 'y' 'b' ' ' 0 0 'o' 'r' 'u' 'o' ',' ~ 'l' 'n' 'e' 'b' 't' 'n' 0 'l' ' ' 'e' ' ' 't' 'w' @ 'a' 't' 'b' ',' 'l' 'o' ~ 'w' 'h' ccw ' ' 'f' 'o' ' ' bY bX = ? 's' 'e' ccw 'd' 1 ' ' 'e' 'r' ' ' @ ccw ccw cw 'l' 'l' 'a' 'w' ' ' 'e' 'h' 't' cw 'o' bY ~ '.' cw 's' 'e' 'l' 't' 't' 'o' cw ' ' 't' bX 0 0 ' ' cw c 0 ret 'b' 'n' 's' = ~ c 'o' cw 0 s d 99 ' ' cw 'o' ' ' ? 1 0 cw 'f' ' ' 'b' 'e' 'e' 'r' ' ' cw 'e' ccw cw @ cw s 'G' 'o' ' ' 't' 'o' ' ' 't' 'h' cw 't' 'e' # 'i' 'n' cw bX bY - 1 @ 98 nop c 0 s 'T' 'a' 'k' 'e' ' ' H 'o' cw cw
PL/M-80
/* * 99 bottles of beer in PL/M-80 * * by John Durbetaki using AEDIT * */ Ninety$Nine: Do; declare as LITERALLY 'LITERALLY' declare CRLF as '0Dh,0Ah' declare Beers BYTE DATA(99); declare Message1(*) BYTE DATA(' of beer on the wall,',CRLF); declare Message2(*) BYTE DATA(' of beeeeer . . . . ,',CRLF); declare Message3(*) BYTE DATA('Take one down, pass it around,',CRLF); declare Message4(*) BYTE DATA(' of beer on the wall.',CRLF); declare End$Message(*) BYTE DATA(CRLF,'Time to buy more beer!',CRLF); declare STATUS BYTE; declare How$Many(128) BYTE; declare How$Many$Count BYTE; Copy: PROCEDURE(Ap,Bp,Count); declare Ap ADDRESS; declare A BASED Ap BYTE; declare Bp ADDRESS; declare B BASED Bp BYTE; declare Count BYTE; DO WHILE Count > 0; B=A; Ap=Ap+1; Bp=Bp+1; Count=Count-1; END; END; Make$How$Many: PROCEDURE(Beers); declare Beers BYTE; if Beers = 0 THEN DO; CALL Copy(.('No more bottles'),.How$Many(0),How$Many$Count=15); END; else if Beers = 1 THEN DO; CALL Copy(.('One more bottle'),.How$Many(0),How$Many$Count=15); END; else DO; if Beers > 10 THEN DO; How$Many(0)='0'+(Beers/10); How$Many(1)='0'+(Beers MOD 10); CALL Copy(.(' bottles'),.How$Many(2),8); How$Many$Count=10; END; else DO; How$Many(0)='0'+Beers; CALL Copy(.(' bottles'),.How$Many(1),8); How$Many$Count=9; END; END; END; Chug: PROCEDURE(Beers); declare Beers BYTE; CALL Make$How$Many(Beers); CALL WRITE(0,.How$Many,Count,.STATUS); CALL WRITE(0,.Message1,SIZE(Message1),.STATUS); CALL WRITE(0,.How$Many,Count,.STATUS); CALL WRITE(0,.Message2,SIZE(Message2),.STATUS); CALL WRITE(0,.Message3,SIZE(Message3),.STATUS); CALL Make$How$Many(Beers-1); CALL WRITE(0,.How$Many,Count,.STATUS); CALL WRITE(0,.Message4,SIZE(Message4),.STATUS); END; DO WHILE Beers > 0; CALL Chug(Beers); Beers=Beers-1; END; CALL WRITE(0,.End$Message,SIZE(End$Message),.STATUS); END;
NewtonScript
NewtonScript is an object-oriented language that runs on Apple Newton MessagePads. You can get a Steve Weyer's free compiler for it at http://www.netaxs.com/~weyer/newton/newtdev.htm.// A simple NewtonScript program to 99 Bottles. // Armen Nakashian, 3/13/97<EMAIL_ADDRESS>BeerSong { Drink:func() for b:=99 to 1 do begin print(bob(b) & " on the wall, " & bob(b) & "."); print("Take one down, pass it around, " & bob(b-1) & " on the wall."); end, bob:func(i): if i==0 then return "no more bottles of beer", else if i==1 then return "1 bottle of beer", else return i & " bottles of beer", }
Occam
-- compiled with the University of Kent "kroc" compiler -- Tony Curtis1997 -- PROC beer (CHAN OF BYTE key, screen, error) VAL INT BEERS IS 99 : -- big fridge! #USE "tty_utils.tco" PROC sorp (VAL INT n, CHAN OF BYTE out) -- singular or plural? IF n > 1 out.string ("s", 1, out) TRUE SKIP : PROC sayit (VAL INT n, CHAN OF BYTE out) -- text for each iteration SEQ out.number (n, 1, out) out.string (" bottle", 1, out) sorp (n, out) out.string (" of beer on the wall, ", 1, out) out.number (n, 1, out) out.string (" bottle", 1, out) sorp (n, out) out.string (" of beer.", 1, out) out.string ("*c*n", 1, out) out.string ("Take one down, pass it around, ", 1, out) VAL INT next IS n - 1 : IF next > 0 SEQ out.number (next, 1, out) out.string (" bottle", 1, out) sorp (next, out) out.string (" of beer on the wall.", 1, out) TRUE out.string ("no bottles of beer on the wall.", 1, out) out.string ("*c*n", 1, out) : PROC beers (VAL INT nbeers, CHAN OF BYTE out) INT b : SEQ b := nbeers WHILE b > 0 SEQ sayit (b, out) b := b - 1 : beers (BEERS, screen) :
PL/SQL
PL/SQL is a programming language that resides in an Oracle database. As PL/SQL has no standard input or output this version is written to be run from the SQLPlus command line using an anonymous PL/SQL block./* Start of code */ set serveroutput on DECLARE counter NUMBER; BEGIN dbms_output.enable; FOR counter IN REVERSE 1..99 LOOP dbms_output.put_line(counter || ' bottles of beer on the wall,'); dbms_output.put_line(counter || ' bottles of beer.'); dbms_output.put_line('Take one down, pass it around,'); IF (counter != 1) THEN dbms_output.put_line(counter - 1 || ' bottles of beer on the wall.'); ELSE dbms_output.put_line('No more beers.'); END IF; END LOOP; END; / /* End of code (The "/" in the line above is very important) */
PH/FI
PH/FI is a light, and powerful, interpreter for server-parsed ("dynamic" this year, SSH since NCSA invented the thing ages ago) html which can be used either as a CGI redirected processor or embbedded in Apache servers. Its web site is http://php.iquest.net/.<HTML> <HEAD> <TITLE> 99 Bottles of beer. </TITLE> <META NAME="Author" CONTENT="Alejandro López-Valencia"> <META NAME="E-Mail"<EMAIL_ADDRESS><META NAME="Description" CONTENT="Written in PHP/FI 2.0"> </HEAD> <BODY BGCOLOR="#FFFFFF"> <? /* Don't show the access information footer */ setshowinfo(0) > <? /* Drink with the boys... */ $hic = 99; while ($hic > 0) ( $huc = $hic - 1; /* Waste CPU, but you are using a Cray, aren't you? */ if ($hic = 1) ( $huc = $hic; ) ; if ($hic = 1) $bottles = "bottle" else $bottles = "bottles" ; echo $hic $bottles of beer on the wall, $hic $bottles of beer. <BR> ; echo Take one and pass it around, <BR> ; echo "$huc $bottles of beer on the wall. <BR>" ; $hic--; ) /* Pass out */ echo No more bottles of beer on the wall. <BR> ; echo No more bottles of beer... <BR> ; echo Go to the store and buy some more... <BR> ; echo 99 bottles of beer. <BR> ; > </BODY> </HTML>
OCL
Operation Control Language is the JCL/batch/scripting language for the IBM System 32/34/36 computer series..** 99 Bottles of Beer on the Wall // EVALUATE P1=99 P2='s' // TAG MOREBEER // * '?1? bottle?2? of beer on the wall,' // * '?1? bottle?2? of beer,' // IFF '?1?'='No more' * 'Take one down and pass it around,' // ELSE * 'Go to the store and get some more,' // IFF '?1?'='No more' EVALUATE P1=?1?-1 * decrement the counter // ELSE EVALUATE P1=99 * reseed counter // IF ?1?>1 EVALUATE * leave P2='s' (for efficiency - OCL is interpreted) // ELSE IF ?1?=1 EVALUATE P2='' // ELSE IF ?1?=0 EVALUATE P1='No more' P2='s' // * '?1? bottle?2? of beer on the wall.' // GOTO MOREBEER * ad infinitum
RC
rc shell script language..#!/usr/local/bin/rc # rc shell version of 99 bottles of beer # by Tom Culliton<EMAIL_ADDRESS>count = (99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) bottles = bottles; one = one for (i in $count) { if (~ $i 1) {bottles = bottle; one = it} if (! ~ $i 99) { echo $i $bottles 'of beer on the wall.' echo } echo $i $bottles 'of beer on the wall,' echo $i $bottles 'of beer,' echo 'take' $one 'down and pass it around,' } echo 'no more bottles of beer on the wall!'
RAMIS Executive
*----------------------------------------------------------------------- * 99 BOTTLES OF BEER ON THE WALL - RAMIS EXECUTIVE VERSION *----------------------------------------------------------------------- CATALOGS BEER &&COUNT/I2 = 99; &&LOOP &&BOTTLES/A7 = IF &COUNT GT 1 THEN 'BOTTLES' ELSE 'BOTTLE '; &&PRINT &COUNT &BOTTLES OF BEER ON THE WALL, &COUNT &BOTTLES OF BEER &&PRINT TAKE ONE DOWN, PASS IT AROUND &&COUNT/I2 = &COUNT - 1; &&IF &COUNT GT 0 GOTO LOOP; &&PRINT NO MORE BOTTLES OF BEER ON THE WALL, NO MORE BOTTLES OF BEER &&PRINT GO TO THE STORE AND BUY SOME MORE END CATALOGS EXEC BEER
RAMIS SBX
*---------------------------------------------------------------------- * 99 BOTTLES OF BEER ON THE WALL - RAMIS SBX VERSION *---------------------------------------------------------------------- PROCESS; DECLARE COUNT AS I2; DO FROM COUNT = 99 TO 2 BY -1; PRINT &COUNT BOTTLES OF BEER ON THE WALL, &COUNT BOTTLES OF BEER; PRINT TAKE ONE DOWN, PASS IT AROUND; ENDDO; PRINT 1 BOTTLE OF BEER ON THE WALL, 1 BOTTLE OF BEER; PRINT TAKE ONE DOWN, PASS IT AROUND; PRINT NO MORE BOTTLES OF BEER ON THE WALL, NO MORE BOTTLES OF BEER;
Compilation Copyright 1995, 1996, 1997 Tim Robinson. All Rights Reserved
Permission to copy enthusiastically granted to instructors of computer science
(who would like to demonstrate the styles of different programming languages
to their students) provided that the names of the contributors are retained.
More beer
Back to the Funhouse
99 Bottles of Beer on the Wall (S-Z)
SNOBOL
* 99 BOTTLES OF BEER IN SNOBOL (UNTESTED) BEER = 99 MOREBEER OUTPUT = BEER ' BOTTLES OF BEER ON THE WALL' OUTPUT = BEER ' BOTTLES OF BEER' OUTPUT = 'TAKE ONE DOWN, PASS IT AROUND' BEER = BEER - 1 OUTPUT = BEER ' BOTTLES OF BEER ON THE WALL' GT(BEER,0) : S(MOREBEER) OUTPUT = 'NO MORE BOTTLES OF BEER ON THE WALL' OUTPUT = 'NO MORE BOTTLES OF BEER' OUTPUT = 'GO TO THE STORE AND BUY SOME MORE' OUTPUT = '99 BOTTLES OF BEER' END
Smalltalk
"Programmer: patrick m. ryan -<EMAIL_ADDRESS>"http://www.access.digex.net/~pryan 99 to: 1 by: -1 do: [ :i | i print. ' bottles of beer on the wall, ' print. i print. ' bottles of beer. ' print. 'take one down, pass it around, ' print. (i-1) print. ' bottles of beer on the wall, ' print. ]
Vax DCL
$ I=100 $ FIRSTLOOP: $ IF (I.EQ. 1) THEN GOTO LAST_BOTTLE $ WRITE SYS$OUTPUT I," BOTTLES OF BEER ON THE WALL" $ WRITE SYS$OUTPUT I," BOTTLES OF BEER" $ WRITE SYS$OUTPUT "IF ONE OF THEM SHOULD HAPPEN TO FALL" $ WRITE SYS$OUTPUT I-1," BOTTLE OF BEER ON THE WALL" $ WRITE SYS$OUTPUT " " $ I=I-1 $ GOTO FIRSTLOOP $ LAST_BOTTLE: $ WRITE SYS$OUTPUT "1 BOTTLE OF BEER ON THE WALL" $ WRITE SYS$OUTPUT "1 BOTTLE OF BEER" $ WRITE SYS$OUTPUT "IF IT SHOULD HAPPEN TO FALL" $ WRITE SYS$OUTPUT "NO MORE BOTTLES OF BEER ON THE WALL"--- A noteworthy alternative
; VMS DCL version of 99 Bottles of Beer $ I=100 $ FIRSTLOOP: $ C=0 $ L=1 $ PAUSE: $ C=C+1 $ IF (I.EQ. 1) THEN GOTO LAST_BOTTLE $ IF (C .EQ. 1500) THEN GOTO FIRSTCLEAN $ GOTO PAUSE $ FIRSTCLEAN: $ GOTO WIPESCN $ FIRSTLINE: $ WRITE SYS$OUTPUT I," bottles of beer on the wall," $ C=0 $ L=2 $ FIRSTPAUSE: $ C=C+1 $ IF (C .EQ. 2000) THEN GOTO SECONDCLEAN $ GOTO FIRSTPAUSE $ SECONDCLEAN: $ GOTO WIPESCN $ SECONDLINE: $ WRITE SYS$OUTPUT I," bottles of beer." $ C=0 $ L=3 $ SECONDPAUSE: $ C=C+1 $ IF (C .EQ. 1500) THEN GOTO THIRDCLEAN $ GOTO SECONDPAUSE $ THIRDCLEAN: $ GOTO WIPESCN $ THIRDLINE: $ WRITE SYS$OUTPUT "If one of them should happen to fall...." $ C=0 $ L=4 $ THIRDPAUSE: $ C=C+1 $ IF (C .EQ. 1500) THEN GOTO FOURTHCLEAN $ GOTO THIRDPAUSE $ FOURTHCLEAN: $ GOTO WIPESCN $ FOURTHLINE: $ WRITE SYS$OUTPUT I-1," bottles of beer on the wall." $ I=I-1 $ GOTO FIRSTLOOP $ LAST_BOTTLE: $ C=0 $ L=5 $ FOURTHPAUSE: $ C=C+1 $ IF (C .EQ. 1500) THEN GOTO FITHCLEAN $ GOTO FOURTHPAUSE $ FITHCLEAN: $ GOTO WIPESCN $ FITHLINE: $ WRITE SYS$OUTPUT "1 bottle of beer on the wall," $ C=0 $ L=6 $ FITHPAUSE: $ C=C+1 $ IF (C .EQ. 1200) THEN GOTO SIXTHCLEAN $ GOTO FITHPAUSE $ SIXTHCLEAN: $ GOTO WIPESCN $ SIXTHLINE: $ WRITE SYS$OUTPUT "1 bottle of beer..." $ C=0 $ L=7 $ SIXTHPAUSE: $ C=C+1 $ IF (C .EQ. 2200) THEN GOTO SEVENTHCLEAN $ GOTO SIXTHPAUSE $ SEVENTHCLEAN: $ GOTO WIPESCN $ SEVENTHLINE: $ WRITE SYS$OUTPUT "If it should happen to fall...." $ C=0 $ L=8 $ LASTPAUSE: $ C=C+1 $ IF (C .EQ. 2000) THEN GOTO LASTCLEAN $ GOTO LASTPAUSE $ LASTCLEAN: $ GOTO WIPESCN $ LASTLINE: $ WRITE SYS$OUTPUT "No more bottles of beer on the wall." $ GOTO QUIT $ WIPESCN: $ C=0 $ WIPE: $ C=C+1 $ WRITE SYS$OUTPUT " " $ IF (C .EQ. 25) THEN GOTO SONGLINE $ GOTO WIPE $ SONGLINE: $ IF (L .EQ. 1) THEN GOTO FIRSTLINE $ IF (L .EQ. 2) THEN GOTO SECONDLINE $ IF (L .EQ. 3) THEN GOTO THIRDLINE $ IF (L .EQ. 4) THEN GOTO FOURTHLINE $ IF (L .EQ. 5) THEN GOTO FITHLINE $ IF (L .EQ. 6) THEN GOTO SIXTHLINE $ IF (L .EQ. 7) THEN GOTO SEVENTHLINE $ IF (L .EQ. 8) THEN GOTO LASTLINE $ QUIT:
SAS
/* SAS version of 99 bottles of beer */ /* by Whitey<EMAIL_ADDRESS>- 06/05/95 */ data _null_; do i = 99 to 1 by -1; put i 'bottles of beer on the wall,' i 'bottles of beer,'; put 'take one down, pass it around,'; j = i - 1; if j = 0 then put 'no more ' @; else put j @; put 'bottles of beer on the wall.'; end; run;
TeX/LaTeX
%% TeX/LaTeX version of 99 bottles of Beer %% %% Craig J Copi -<EMAIL_ADDRESS>%% \parindent=0pt \newcount\beercurr \def\beer#1{\beercurr=#1\let\next=\removebeer\removebeer} \def\removebeer{ \ifnum\beercurr>1 \the\beercurr\ bottles of beer on the wall,\par \the\beercurr\ bottles of beer,\par take one down, pass it around,\par \advance\beercurr by -1 \the\beercurr\ bottle\ifnum1<\beercurr{s}\fi\ of beer on the wall.\par \vskip 2ex\relax \else 1 bottle of beer on the wall,\par 1 bottle of beer,\par take one down, pass it around,\par no bottles of beer on the wall.\par \vskip .5ex Time to buy some more beer\ldots. \let\next=\relax \fi \next} \beer{99}
Tutor
*--- Chris Lopez -<EMAIL_ADDRESS>---* *--- start of code ---* define maxbeer = 99 origin:n1 beer $$ # of beers remaining atloc $$ where to start writing this line nextlin(x) = (x <= (x+100) $mod$ 3200) * mode rewrite calc beer <= maxbeer atloc <= 1 loop . at nextlin(atloc) . showt beer,2 . * Warning: trailing space on following line . write bottles of beer on the wall, . showt beer,2 . write bottles of beer. . at nextlin(atloc) . write Take one down, pass it around. outloop ((beer<=beer-1) < 2) . showt beer-1,2 . write bottles of beer. endloop * write 1 bottle of beer. at nextlin(atloc) write 1 Bottle of beer on the wall, 1 bottle of beer. Take it down, pass it around, no bottles of beer on the wall. * pause keys=all jumpout q *--- end of code ---*
TCL
# Tcl version of 99 bottles of beer on the wall # Author: Don Libes<EMAIL_ADDRESS># proc bottles {i} { return "$i bottle[expr $i!=1?"s":""] of beer" } proc line123 {i} { puts "[bottles $i] on the wall," puts "[bottles $i]," puts "take one down, pass it around," } proc line4 {i} { puts "[bottles $i] on the wall.\n" } for {set i 99} {$i>0} {} { line123 $i incr i -1 line4 $i }
SML
See here for more info(* SML version of 99 bottles of beer *) (* written by Norvald -<EMAIL_ADDRESS>*) let val itoa = Makestring.intToStr fun getabeer 0 = (print "Go to the store and buy some more,\n"; print "99 bottles of beer on the wall.\n") | getabeer 1 = (print "1 bottle of beer on the wall,\n"; print "1 bottle of beer,\n"; print "Take one down, pass it around,\n"; print "0 bottle of beer on the wall.\n\n"; getabeer (0)) | getabeer x = (print (itoa(x)^" bottles of beer on the wall,\n"); print (itoa(x)^" bottles of beer,\n"); print "Take one down, pass it around,\n"; print (itoa(x-1)^" bottles of beer on the wall.\n\n"); getabeer (x-1)) in getabeer 99; end
SQL
remark 99 bottles of beer with Oracle SQL*Plus remark<EMAIL_ADDRESS>< Rob van de Pol> remark remark assuming that YourTable contains at least 99 rows ;-) remark remark RowNum is an Oracle psuedo column indicating the sequence the rows remark were selected. SELECT TO_CHAR(100-rownum)||' bottles of beer on the wall, ' || TO_CHAR(100-rownum)||' bottles of beer,' , 'take one down and pass it around, ' , DECODE ( TO_CHAR(99-rownum) , '0' , 'No more' , TO_CHAR(99-rownum) )|| ' bottles of beer,' FROM YourTable WHERE rownum < 100
Scheme
;;; Tim Goodwin<EMAIL_ADDRESS>(define bottles (lambda (n) (cond ((= n 0) (display "No more bottles")) ((= n 1) (display "One bottle")) (else (display n) (display " bottles"))) (display " of beer"))) (define beer (lambda (n) (if (> n 0) (begin (bottles n) (display " on the wall") (newline) (bottles n) (newline) (display "Take one down, pass it around") (newline) (bottles (- n 1)) (display " on the wall") (newline) (newline) (beer (- n 1)))))) (beer 99)
4DOS Batch
@ECHO OFF :: BEER.BTM - 4DOS version 5.5 batch (btm) file :: by Rodney M. Savard<EMAIL_ADDRESS>SETLOCAL SET plural=`s` DO bottle = 99 TO 1 BY -1 ECHOS %bottle% bottle%plural% of beer on the wall, ECHO %bottle% bottle%plural% of beer. ECHOS Take one down, pass it around, IFF (%@EVAL[%bottle% - 1]) == (0) THEN ECHO no more bottles of beer on the wall. ELSE IF (%@EVAL[%bottle% - 1]) == (1) UNSET plural ECHO %@EVAL[%bottle% - 1] bottle%plural% of beer on the wall. ECHO. ENDIFF ENDDO ENDLOCAL
Verilog
Verilog is a hardware modelling language./*********************************************************** * Module: 99 bottles of beer * By Danny Mulligan ***********************************************************/ module beer; integer i; initial begin for (i=99; i>0; i=i-1) begin $display("%0d bottles of beer on the wall,", i); $display("%0d bottles of beer,", i); $display("Take one down and pass it around,"); if (i==1) $display("No more bottles of beer on the wall.\n"); else $display("%0d bottles of beer on the wall.\n", i-1); end $display("Go to the store and buy some more."); end end
Simula
BEGIN COMMENT Simula version of 99 beers Maciej Macowicz<EMAIL_ADDRESS>Status: UNTESTED :) ; INTEGER bottles; FOR bottles:= 99 STEP -1 UNTIL 1 DO BEGIN OutInt(bottles,1); OutText("bottle(s) of beer on the wall, "); OutInt(bottles,1); Outtext("bottle(s) of beer"); OutImage; Outtext("Take one down, pass it around, "); OutInt(bottles,1); OutText("bottle(s) of beer on the wall, "); END; OutText("1 bottle of beer on the wall, one bottle of beer."); Outimage; OutText("Take one down, pass it around, no more bottles of beer on the wall"); OutImage END
Sather
Click for information.-- Sather for 99 Bottles of Beer -- -- David Stoutamire<EMAIL_ADDRESS>class MAIN is main is loop b::=99.downto!(1); #OUT + bob(b) + " on the wall, " + bob(b) + ".\n" + "Take one down, pass it around, " + bob(b-1) + " on the wall.\n\n"; end end; bob(i:INT):STR is case i when 0 then return "no more bottles of beer"; when 1 then return "1 bottle of beer"; else return i.str + " bottles of beer"; end end end
VHDL
VHDL is VHSIC (Very High Speed Integrated Circuits) Hardware Description Language used for hardware design and testing.-- This is the VHDL (ANSI/IEEE Std 1076 - 1993) -- version of the beer song. -- F. J. Ludicky, Sundstrand Aerospace entity beer_song is port(bottles: out integer; words: out string(1 to 28); start_singing: in boolean); end beer_song; architecture silly of beer_song is begin lets_sing: process begin wait on start_singing until start singing; for index_bottles in 99 downto 1 loop bottles <= index_bottles; words <= "bottles of beer on the wall,"; wait for 5 sec; bottles <= index_bottles; words <= "bottles of beer, "; wait for 5 sec; words <= "take one down, "; wait for 5 sec; words <= "pass it around, "; wait for 5 sec; bottles <= index_bottles - 1; words <= "bottles of beer on the wall." wait for 5 sec. end loop; assert false report "No more beer!" severity warning; end process lets_sing; end silly;
Superbase
SUB main() REM "99 bottles of beer", Superbase SBL version REM written by Mark Pilgrim<EMAIL_ADDRESS>REM [ If my boss is reading this, I'd just like to reassure REM him that I wrote this on my own time. -MP ] DIM i%%,beer$,bottle$ OPEN WINDOW "99 bottles of beer" bottle$ = " bottles " beer$ = "99" FOR i%% = 99 TO 1 STEP - 1 ? beer$ + bottle$ + "of beer on the wall," ? beer$ + bottle$ + "of beer," ? "Take " + IF (i%% > 1,"one","it") + " down, pass it around," IF i%% > 1 THEN beer$ = LTRIM$ ( TRIM$ ( STR$ (i%% - 1))) IF i%% = 2 THEN bottle$ = " bottle " ? beer$ + bottle$ + "of beer on the wall." ? ELSE ? "No more bottles of beer on the wall." END IF NEXT END SUB
Unix DC
DC is Unix's desk calculator[ Sing the classic '99 Bottles of Beer', using the Unix dc utility. ]sd [ ]sd [ Run this one by typing 'dc < bottles.dc' at the Unix prompt, where ]sd [ bottles.dc is the file containing these lines. ]sd [ Author: Kevin Quick<EMAIL_ADDRESS>]sd [ ]sd [ bottles of beer]sb[ on the wall]sw[,]sc [take one down, pass it around]st[.]sp[no more]sk [10 13lplwlbln1-10 13lclt10 13lclbln32lclwlbln]sl [lzxPPPPlzxPPPPPPPPlzxPPPPP]so[lkP]sx[dZselyxsd]su [d10le1-dse^ /d10/10*-48+P le0<y]sy[d0=xd0<u]sz [llxloxln1-dsn0<r]sr[Plf1-dsf0<g]sg 99snlrx10P
Trac
#(#*( TRAC version of 99 bottles of beer. )) #(#*( written by Akira KIDA<EMAIL_ADDRESS>)) #(#*( )) #(#*( To run this, save the entire script as `beer.trac', and then )) #(#*( type three lines in order. )) #(#*( )) #(#*( #(ld,beer.trac) )) #(#*( #(cl,beer,99) )) #(#*( ' )) #(#*( )) #(ds,bottle,(#(gr,1,B,(No more bottles),(#(gr,2,B,(B bottle),(B bottles)))))) #(ss,bottle,B) #(ds,beer,(#(gr,1,B,, (#(ps,#(cl,bottle,B) of beer on the wall(,) #(cl,bottle,B) of beer.( )Take one down(,) pass it around.( )#(cl,bottle,##(-,B,1)) of beer on the wall.( )( ))#(cl,beer,##(-,B,1)))))) #(ss,beer,B)
Sisal
Click for more information.% ------------------------------------------------------------ % The classic N bottles of beer problem. The Sisal language % is implicitly parallel and functional. It is not really desigined % for string processing (scientific numeric stuff is more like it!) % The following program will run in parallel on Crays, the % SGI Challenge, the Meiko, etc.... and run just swell on % your average ordinary PC too. More information on the Sisal % language project can be found at % % http://www.llnl.gov/sisal/SisalHomePage.html % % or contact<EMAIL_ADDRESS>% % Author: Pat Miller<EMAIL_ADDRESS>% % ------------------------------------------------------------ define main type string = array[character]; % ------------------------------------------------------------ % OUCH -- have to really start from scratch % ------------------------------------------------------------ function DigitToChar(d : integer returns character) character(integer('0')+d) end function % ------------------------------------------------------------ % Sisal has no I/O runtime library for strings so we % can build up the ASCII representation a digit at a time % The sign handling is there for completeness and is not needed % to do the BEER problem % ------------------------------------------------------------ function itoa(n : integer returns string) array_setl( let s := for initial x := abs(n); d := array[1: DigitToChar( mod(x,10) )]; while x > 10 repeat x := old x / 10; d := array_addl(old d,DigitToChar(mod(x,10))); returns value of d end for in if n < 0 then array_addl(s,'-') else s end if end let ,1) end function % ------------------------------------------------------------ % Produce one stanza of the 99 bottles of beer song. Some care % is taken to keep it grammatical % ------------------------------------------------------------ function BottlesOfBeer(i : integer returns array[string]) let s,bottles,preface,n,nextbottles := if i = 1 then "1"," bottle","If that bottle","No more"," bottles" elseif i = 2 then itoa(2)," bottles","If one of those bottles",itoa(1)," bottle" else itoa(i)," bottles","If one of those bottles",itoa(i-1)," bottles" end if; in array[1: s || bottles || " of beer on the wall", s || bottles || " of beer!", preface || " should happen to fall... ", n || nextbottles || " of beer on the wall!", "" ] end let end function % ------------------------------------------------------------ % This main loop executes in parallel stuffing the 4 lines % of each stanza into an array holding the whole song % ------------------------------------------------------------ function main(n : integer returns array[string]) for i in 0,n-1 howmany := n-i; stanza := BottlesOfBeer(howmany); returns value of catenate stanza end for || array[1: "Time to buy more beer"] end function
sed
The UNIX stream editor. The creator of sed didn't think it's interesting to edit empty files, so this needs some kind of input, e.g.
echo '' | sed -f 99.sed1{ s/.*/99 bottles of beer on the wall/ h : x p s/ on.*// p s/.*/take :&: down, pass it around/ /one/{ s/:.*:/it/ p g s/on\(.*le\)/no mor\1s/ p s/.*// q } s/:.*:/one/ p g y/1234567890/0123456789/ /^.[0-8] /{ s/^.// x s/\(.\).*/\1/ G s/\n// } s/^0// s/^1\( .*le\)s/one\1/ h p s/.*// p g b x }
Turing
Turing is a commercially supported language used in 50% of Ontario schools.% Ric Holt<EMAIL_ADDRESS>% Turing language version of 99 bottles of beer for decreasing i : 99 .. 1 put i, " bottle(s) of beer on the wall, ", i, " bottle(s) of beer" put "Take one down, pass it around, ", i - 1, " bottle(s) of beer on the wall" end for
Surf
More information here.(begin 'SINGING (define HOW-MANY-BOTTLES (lambda (bottles where) (format stdout "%d bottle%d of beer%d\n" (list (if (> bottles 0) bottles "No more") (if (= bottles 1) "" "s") where)))) (recurse DRINKING (bottles 99) (how-many-bottles bottles " on the wall,") (how-many-bottles bottles ",") (if (= bottles 0) (display stdout "Go the the store, and buy some more!\n") (begin (display stdout "You take one down, pass it around,\n") (how-many-bottles (- bottles 1) " on the wall.\n") (drinking (- bottles 1))))) 'GO-TO-THE-STORE)
Surf
The person who sent this was Ed Gamble who promised more info on this language. If it's not on his web page, pester him.(begin 'SINGING (define HOW-MANY-BOTTLES (lambda (bottles where) (format stdout "%d bottle%d of beer%d\n" (list (if (> bottles 0) bottles "No more") (if (= bottles 1) "" "s") where)))) (recurse DRINKING (bottles 99) (how-many-bottles bottles " on the wall,") (how-many-bottles bottles ",") (if (= bottles 0) (display stdout "Go the the store, and buy some more!\n") (begin (display stdout "You take one down, pass it around,\n") (how-many-bottles (- bottles 1) " on the wall.\n") (drinking (- bottles 1))))) 'GO-TO-THE-STORE)
SPITBOL
* MaxSPITBOL version (SPITBOL implementation on * the Macintosh from Catspaw, Inc. (Salida, CO). * NOTE: I have no connection w/them other than being * a long-time satisfied user of their product * D.H<EMAIL_ADDRESS>p0 = "NO MORE" ; p1 = " BOTTLE" ; p2 = "S" ; p3 = " OF BEER" p4 = " ON THE WALL" ; p5 = "TAKE ONE DOWN, PASS IT AROUND" b = 99 p6 = ((NE(b,0) b, p0) p1 (NE(b,1) p2,) p3) A1 OUTPUT = p6 p4 ; OUTPUT = p6 ; OUTPUT = p5 b = b - 1 p6 = ((NE(b,0) b, p0) p1 (NE(b,1) p2,) p3) OUTPUT = p6 p4 ; OUTPUT = ; NE(b,0) :S(A1) END
zsh
Yet another UNIX shell.#!/usr/local/bin/zsh alias dec_beer='let beer="\$beer - 1"' alias print_strophe='echo "$beer bottle$s of beer on the wall," echo "$beer bottle$s of beer," echo "take one down, pass it around," dec_beer if [ "$beer" -eq "1" ] then unset s fi if [ "$beer" -eq "0" ] then beer="No" s="s" fi echo "$beer bottle$s of beer on the wall." echo' beer=99 s="s" while [ "$beer" -ne "No" ] do print_strophe done
Sendmail
Sendmail is used by mail systems for routing and controlling e-mail delivery. It was never really intended for general purpose programming, but here you go.# Save this to /tmp/foo.bar # echo '49 9 9' | /usr/lib/sendmail -bt -d21 -C/tmp/foo.bar # Sorry, Smail is too brain dead to run this. Use sendmail instead. # Programmed by: Felix von LeitnerDH"take one down\, pass it around\," DG"bottles of beer" DF"$G on the wall\." DE"$G on the wall\," DN"No beer left\." S45 R$- 2 $* foo bar $1 1 $F R$- 3 $* $1 2 $F R$- 4 $* $1 3 $F R$- 5 $* $1 4 $F R$- 6 $* $1 5 $F R$- 7 $* $1 6 $F R$- 8 $* $1 7 $F R$- 9 $* $1 8 $F R9 0 $* 8 9 $F R8 0 $* 7 9 $F R7 0 $* 6 9 $F R6 0 $* 5 9 $F R5 0 $* 4 9 $F R4 0 $* 3 9 $F R3 0 $* 2 9 $F R2 0 $* 1 9 $F R1 0 $* 0 9 $F R$- 1 $* $1 0 $F Rfoo bar $- 1 $F $1 1 $F R0 0 $* $N S47 R$- $- $E $1 $2 $G, S48 R$- $- $>47 $1 $2 $E R$- $- $G, $>45 $1 $2 $H R$- $- $F $1 $2 R$N *burp* S49 R$- $- $>48 $1 $2
SETL
An online SETL server is available where you can run the program without the compiler.$ SETL version $ written by Arion Lei<EMAIL_ADDRESS>beer := {1,2..99}; (until beer={}) print(#beer, " bottles of beer on the wall,"); print(#beer, " bottles of beer. Take one down, pass it around,"); $ take an arbitrary one down beer less := arb beer; if beer/={} then print(#beer, " bottles of beer on the wall."); end if beer/={}; end until; print("No more bottles of beer on the wall, no more bottles of beer."); print("Go to the store and buy some more... 99 bottles of beer");
Yorick
Click here for further information./* The Bottles of Beer song (c) 1996 Eric Korpela * Yorick version-- Modeled after the IDL version. * USAGE: bottles or bottles, number */ /* Set up our song structure............ */ struct _song { int n0; string s1; int n1; string s2,s3; int n2; string s4; } func bottles( number ) { if (is_void(number)) { number=99 write,"BOTTLES: Defaulting to 99 bottles!" } song=array(_song(n0=0,s1=" bottles of beer on the wall.\n",n1=0, s2=" bottles of beer.\n", s3="You take one down and pass it around\n", n2=0, s4=" bottles of beer on the wall.\n"), number) /* put in the appropriate numbers */ i=(number)-indgen(number) song(*).n0=i+1 song(*).n1=i+1 song(*).n2=i write,song.n0,song.s1,song.n1,song.s2,song.s3,song.n2,song.s4 }
VIM
VIM is an editor language similar to vi The ^[ and ^X represent and Esc and Ctrl-X respecively:" This is a beer program for VIM. :" Written by Martin Mares<EMAIL_ADDRESS>:" Run by :so! beer i102 bottles^[0v$"bd qzA of beer on the wall^Xq qa"bp@zA, ^["bpA of beer. ^[q qcATake one down, pass it around, ^["bp0^X03lv$"by@zA. ^[q qd@a@cq :0 dG98@dA1 bottle^[0v$"bd@aA1 bottles^[0v$"bd@c@aAGo to the store and buy some more, 100<EMAIL_ADDRESS>vi
vi is the classic, pre-emacs text editor for U**x.I ! 99 bottles of beer lyrics generation using vi macros! ! ! instructions: ! 1. rename your .exrc (so you have no existing macros to conflict with mine) ! 2. vi outfile < this_file >/dev/null 2>&1 ! the output will be in outfile ! ! Please note that this file is littered with control characters. ! All ^V, and ^] and ^M character sequences are control characters. ! The other occurrences of ^ are actually supposed to be there. ! ! I also might be the first to point out that I took the liberty of ! using 'bc' to do my recalculations (sorry). ! ! Scott Engberg ! 6/8/96<EMAIL_ADDRESS>! ^[Gd1G :set magic :map F A bottles of beer on the wall^V^M :map K A bottles of beer^V^M :map H Atake one down pass it around^V^M :map Q "aP :map O "ayy :map W A-1 :map E !!bc^V^M :map S :s/^\([1-9]\)/\1/^V^M :map R OF^V^[QK^V^[H^V^[QW^V^[EST :map T R i99^[R^[ G ?^0 dG oNo more bottles of beer on the wall!^[ :wq!
Visual Basic
'Jeff Shepherd 9/12/96'99 Bottles of Beer for Visual Basic '(1) Start a new project, paste a single listbox on the form. '(2) Double-click on the form, paste the following code into 'the Form_Load sub. (3) Hit F5 to run Dim n As Integer Dim s As String Width = 6000 Height = Screen.Height * 2 / 3 Top = (Screen.Height - Height) / 2 Left = (Screen.Width - Width) / 2 Caption = "99 Bottles of Beer" List1.Top = 0 List1.Left = 0 List1.Width = Form1.ScaleWidth List1.Height = Form1.ScaleHeight List1.AddItem s & "99 bottles of Beer on the wall," List1.AddItem s & "99 bottles of Beeeer..." List1.AddItem "You take one down, pass it around..." For n = 98 To 1 Step -1 s = IIf(n = 1, n & " final bottle", n & " bottles") List1.AddItem s & " of Beer on the wall." List1.AddItem "" List1.AddItem s & " of Beer on the wall," List1.AddItem s & " of Beeeer..." List1.AddItem "You take one down, pass it around..." Next n List1.AddItem "No more bottles of Beer on the wall."
Turing Machine
In the dawn of the computing era, Alan Turing proposed a type of computer. This is an implementation of 99BoB for such a machine. Full details available at http://coli.uni-sb.de/~theiling/pub/Turing%20Machine/% `99 Bottles of Beer' on a Turing Machine % written 6/97 by Henrik Theiling%% This defines \delta, the transition function. There are four entries %% on each line: %% CurrentCharacter OldState NewCharacterOrAction NewState %% %% Thus each line defines: %% \delta (CurrentCharacter,OldState) = (NewCharacterOrAction, NewState) %% % initialise tape with # cr "99" (#) # 0 -> 1 # 1 cr 2 cr 2 -> 3 # 3 \9 3 \9 3 -> 4 # 4 \9 4 \9 4 -> 10 # 10 1000 10 1000 10 <- 100 % write `bottle' or `bottles': % check for `1' ? 100 ? 105 \1 100 <- 102 ? 102 ? 105 cr 102 cr 120 % write `bottle', not `bottles' % write `bottles' (first shift back to the left): \0 105 -> 105 \1 105 -> 105 \2 105 -> 105 \3 105 -> 105 \4 105 -> 105 \5 105 -> 105 \6 105 -> 105 \7 105 -> 105 \8 105 -> 105 \9 105 -> 105 ? 105 -> 106 # 106 b 106 b 106 -> 107 # 107 o 107 o 107 -> 108 # 108 t 108 t 108 -> 109 # 109 t 110 t 110 -> 111 # 111 l 111 l 111 -> 112 # 112 e 112 e 112 -> 113 # 113 s 200 % write `bottle' (first shift back to the left): \1 120 -> 120 cr 120 -> 120 ? 120 -> 121 # 121 b 121 b 121 -> 122 # 122 o 122 o 122 -> 123 # 123 t 123 t 123 -> 124 # 124 t 124 t 124 -> 125 # 125 l 125 l 125 -> 126 # 126 e 200 % return subroutine 1: ? 200 <- 200 1000 200 # 1000 2000 200 _ 2000 3000 200 _ 3000 5000 200 # 5000 6000 200 _ 6000 7000 200 cr 7000 9100 200 # 9100 9200 200 _ 9200 9300 200 _ 9300 # 200 # stop % return subroutine 2: ? 210 -> 210 4000 210 cr 4000 8000 210 cr 8000 9000 210 # 9000 9400 210 cr 9400 % % This is the main loop: % % 1000 is the return state for the first line after `bottle' or `bottles' % has been written. # 1000 -> 1001 ? 1001 -> 1001 # 1001 2000 1002 2000 1002 -> 300 % write `of beer' ? 2000 -> 2000 # 2000 3000 2000 3000 2000 -> 400 % write `on the wall' ? 3000 -> 3000 # 3000 4000 500 % copy number ? 4000 -> 4000 # 4000 5000 4000 5000 4000 <- 100 % write `bottle' or `bottles' # 5000 -> 5001 ? 5001 -> 5001 # 5001 6000 5002 6000 5002 -> 300 % write `of beer' ? 6000 -> 6000 # 6000 7000 6000 7000 6000 -> 700 % write `Take one away and pass it around,' ? 7000 -> 7000 # 7000 8000 500 % copy number ? 8000 -> 8000 # 8000 _ 8001 _ 8001 -> 8001 # 8001 9000 8001 9000 8001 <- 8002 % decrement number _ 8002 <- 800 cr 9000 -> 9004 % zero: all zeros have been eliminated... # 9000 <- 9000 _ 9000 # 9001 # 9001 <- 9000 ? 9000 -> 9002 # 9002 9100 9002 9100 9002 <- 100 % write `bottle' or `bottles' # 9004 \0 9004 \0 9004 -> 9000 # 9100 -> 9101 ? 9101 -> 9101 # 9101 9200 9101 9200 9101 -> 300 % write `of beer' ? 9200 -> 9200 # 9200 9300 9200 9300 9200 -> 400 % write `on the wall' ? 9300 -> 9300 # 9300 . 9300 % write a full-stop . 9300 -> 9301 # 9301 cr 9301 % and an additional newline cr 9301 -> 9302 # 9302 9400 500 % copy number cr 9400 -> 9400 \0 9400 -> 9400 ? 9400 -> 9401 ? 9401 -> 9401 # 9401 1000 9401 1000 9401 <- 100 % start again # 9400 <- 9900 % write `Time to go to the store.' and stop \0 9900 T 9900 T 9900 -> 9901 # 9901 i 9901 i 9901 -> 9902 # 9902 m 9902 m 9902 -> 9903 # 9903 e 9903 e 9903 -> 9904 # 9904 _ 9904 _ 9904 -> 9905 # 9905 t 9905 t 9905 -> 9906 # 9906 o 9906 o 9906 -> 9907 # 9907 _ 9907 _ 9907 -> 9908 # 9908 g 9908 g 9908 -> 9909 # 9909 o 9909 o 9909 -> 9910 # 9910 _ 9910 _ 9910 -> 9911 # 9911 t 9911 t 9911 -> 9912 # 9912 o 9912 o 9912 -> 9913 # 9913 _ 9913 _ 9913 -> 9914 # 9914 t 9914 t 9914 -> 9915 # 9915 h 9915 h 9915 -> 9916 # 9916 e 9916 e 9916 -> 9917 # 9917 _ 9917 _ 9917 -> 9918 # 9918 s 9918 s 9918 -> 9919 # 9919 t 9919 t 9919 -> 9920 # 9920 o 9920 o 9920 -> 9921 # 9921 r 9921 r 9921 -> 9922 # 9922 e 9922 e 9922 -> 9923 # 9923 . 200 % go back to the beginning and halt % write `of beer': # 300 o 300 o 300 -> 301 # 301 f 301 f 301 -> 302 # 302 _ 302 _ 302 -> 303 # 303 b 303 b 303 -> 304 # 304 e 304 e 304 -> 305 # 305 e 305 e 305 -> 306 # 306 r 200 % return <- % write `on the wall': # 400 o 400 o 400 -> 401 # 401 n 401 n 401 -> 402 # 402 _ 402 _ 402 -> 403 # 403 t 403 t 403 -> 404 # 404 h 404 h 404 -> 405 # 405 e 405 e 405 -> 406 # 406 _ 406 _ 406 -> 407 # 407 w 407 w 407 -> 408 # 408 a 408 a 408 -> 409 # 409 l 409 l 409 -> 410 # 410 l 200 % return <- % write `Take one away and pass it around,': # 700 T 700 T 700 -> 701 # 701 a 701 a 701 -> 702 # 702 k 702 k 702 -> 703 # 703 e 703 e 703 -> 704 # 704 _ 704 _ 704 -> 705 # 705 o 705 o 705 -> 706 # 706 n 706 n 706 -> 707 # 707 e 707 e 707 -> 708 # 708 _ 708 _ 708 -> 709 # 709 a 709 a 709 -> 710 # 710 w 710 w 710 -> 711 # 711 a 711 a 711 -> 712 # 712 y 712 y 712 -> 713 # 713 _ 713 _ 713 -> 714 # 714 a 714 a 714 -> 715 # 715 n 715 n 715 -> 716 # 716 d 716 d 716 -> 717 # 717 _ 717 _ 717 -> 718 # 718 p 718 p 718 -> 719 # 719 a 719 a 719 -> 720 # 720 s 720 s 720 -> 721 # 721 s 721 s 721 -> 722 # 722 _ 722 _ 722 -> 723 # 723 i 723 i 723 -> 724 # 724 t 724 t 724 -> 725 # 725 _ 725 _ 725 -> 726 # 726 a 726 a 726 -> 727 # 727 r 727 r 727 -> 728 # 728 o 728 o 728 -> 729 # 729 u 729 u 729 -> 730 # 730 n 730 n 730 -> 731 # 731 d 731 d 731 -> 732 # 732 , 200 % return <- % decrement decimal number in ASCII format (hangs on underflow): \2 800 \1 210 \3 800 \2 210 \4 800 \3 210 \5 800 \4 210 \6 800 \5 210 \7 800 \6 210 \8 800 \7 210 \9 800 \8 210 \1 800 \0 802 \0 800 \9 801 \9 801 <- 800 \0 802 <- 802 ? 802 -> 210 cr 802 -> 803 \0 803 \9 803 \9 803 -> 803 _ 803 <- 804 \9 804 _ 210 % copy number: ? 500 <- 500 # 500 _ 501 ? 501 <- 501 cr 501 -> 502 \0 502 # 600 \1 502 # 610 \2 502 # 620 \3 502 # 630 \4 502 # 640 \5 502 # 650 \6 502 # 660 \7 502 # 670 \8 502 # 680 \9 502 # 690 _ 502 -> 210 % return -> % Copying ciphers: % copy `0' to the right: # 600 -> 601 ? 601 -> 601 # 601 \0 602 ? 602 <- 602 # 602 \0 603 \0 603 -> 502 % next cipher % copy `1' to the right: # 610 -> 611 ? 611 -> 611 # 611 \1 612 ? 612 <- 612 # 612 \1 613 \1 613 -> 502 % next cipher % copy `2' to the right: # 620 -> 621 ? 621 -> 621 # 621 \2 622 ? 622 <- 622 # 622 \2 623 \2 623 -> 502 % next cipher % copy `3' to the right: # 630 -> 631 ? 631 -> 631 # 631 \3 632 ? 632 <- 632 # 632 \3 633 \3 633 -> 502 % next cipher % copy `4' to the right: # 640 -> 641 ? 641 -> 641 # 641 \4 642 ? 642 <- 642 # 642 \4 643 \4 643 -> 502 % next cipher % copy `5' to the right: # 650 -> 651 ? 651 -> 651 # 651 \5 652 ? 652 <- 652 # 652 \5 653 \5 653 -> 502 % next cipher % copy `6' to the right: # 660 -> 661 ? 661 -> 661 # 661 \6 662 ? 662 <- 662 # 662 \6 663 \6 663 -> 502 % next cipher % copy `7' to the right: # 670 -> 671 ? 671 -> 671 # 671 \7 672 ? 672 <- 672 # 672 \7 673 \7 673 -> 502 % next cipher % copy `8' to the right: # 680 -> 681 ? 681 -> 681 # 681 \8 682 ? 682 <- 682 # 682 \8 683 \8 683 -> 502 % next cipher % copy `9' to the right: # 690 -> 691 ? 691 -> 691 # 691 \9 692 ? 692 <- 692 # 692 \9 693 \9 693 -> 502 % next cipher
Tiny Fugue
Tiny Fugue is a mud client language; 99 bottles of beer in TF macros. ; by Carey Evans. ; ; Type "/beer" to use after loading it. /def beerecho = /echo - %{*} /def beerbreath = /echo ; Uncomment the following lines instead to send to the MUD: ; /def beerecho = say %{*} ; /def beerbreath = :takes a deep breath. /def beerbottles = \ /if ({1} == 1) /echo 1 bottle of beer%; \ /else /echo %{1} bottles of beer%; \ /endif /def beer1 = /beerecho $(/beerbottles %{1}) on the wall%2 /def beer2 = /beerecho $(/beerbottles %{1}). /def beer3 = /beerecho Take one down and pass it around, /def beer = \ /let bottles=%{1-99}%; \ /while ( bottles > 0 ) \ /beer1 %{bottles} ,%; \ /beer2 %{bottles}%; \ /beer3%; \ /let bottles=$[bottles - 1]%; \ /if ( bottles == 0 ) /break%; /endif%; \ /beer1 %{bottles} .%; \ /beerbreath%; \ /done%; \ /beerecho No more bottles of beer on the wall.
SR
SR (Synchronizing Resources) is an educational language with built-in multi-threading and multi-processing. The language is available at ftp://ftp.cs.arizona.edu/sr/# SR version of 99 bottles of beer # by David Larsson #<EMAIL_ADDRESS>http://www.dd.chalmers.se/~f92dala # # This version demonstrates some of SR's concurrent aspects, simulating # the (common?) situation where 99 people drink one bottle of beer each # simultaneously, while singing exactly one verse of the song. # resource main() op sing_it(int; string[120]) # Create 99 processes (or, rather, threads) # for the verses in the song process swing_it(bottle := 1 to 99) var bottle1_str, bottle2_str : string[15]; if bottle > 2 -> bottle1_str := string(bottle) || " bottles"; bottle2_str := string(bottle-1) || " bottles"; [] bottle = 2 -> bottle1_str := "2 bottles"; bottle2_str := "1 bottle"; [] else -> bottle1_str := "1 bottle"; bottle2_str := "No more bottles"; fi # Send the verse back to the main thread send sing_it(bottle, bottle1_str || " of beer on the wall, " || bottle1_str || " of beer...\n" || "Take one down and pass it around\n" || bottle2_str || " of beer on the wall\n"); end swing_it # Make sure the verses get printed in the right order fa expected := 99 downto 1 -> in sing_it(bottle, verse) st bottle = expected -> write(verse); ni af # I guess the bartender sings this one write("Go to the store, buy some more!"); write("99 bottles of beer on the wall"); end main
Simscript
SIMSCRIPT is a simulation language from CACI and runs on PCs and VAXen.'' 99 Bottles of Beer using SIMSCRIPT '' Author: Jeremy KonopkaPREAMBLE PROCESSES INCLUDE brewer, drinker RESOURCES INCLUDE bottle DEFINE countem AS A INTEGER VARIABLE END MAIN CREATE EVERY bottle(1) LET U.bottle(1) = 1 LET countem=100 ACTIVATE A brewer NOW START SIMULATION PRINT 1 LINE THUS No more bottles of beer on the wall.  ALWAYS IF countem = 2 PRINT 2 LINES THUS One more bottle of beer on the wall. ALWAYS END
Word Basic
For the Microsoft Word word processor.' Word Basic version of 99 bottles of beer ' by Cory Sandahl<EMAIL_ADDRESS>12/10/96 Sub MAIN FileNew .NewTemplate = 1, .Template = "Normal.DOT" StartOfDocument s$ = "s" For NumberOfBeers = 99 To 1 Step - 1 Insert Str$(NumberOfBeers) + " bottle" + s$ + " of beer on the wall," + Chr$(11) Insert Str$(NumberOfBeers) + " bottle" + s$ + " of beer..." + Chr$(11) Insert "Take one down, pass it around," + Chr$(11) If (NumberOfBeers - 1) < 2 Then s$ = "" End If Insert Str$(NumberOfBeers - 1) + " bottle" + s$ + " of beer on the wall. " + Chr$(11) + Chr$(11) Next Insert Chr$(11) + Chr$(11) + "No more beer. Bye-bye." End Sub
Silk
Silk is a language for generating web pages on the fly.<%sub default()%> <html><title>SilkyBeers</title><body><h1>99 beers on the wall, silk style...</h1><br><br><br> <% nBeers = 99 while (nBeers > 0) ?CStr(nBeers) & " bottles of beer on the wall," ?Cstr(nBeers) & " bottles of beer..." ?"Take one down, pass it around," nBeers = nBeers - 1 ?CStr(nBeers) & " bottles of beer on the wall.<br>" wend %> </body></html> <%end sub%>
Usertalk
Macintosh scripting languageon ninetyNineBottles() { local { lyrics = ""; bottleStartCount = 99; bottleString = ""; eol = "\r"}; on numBottles(theCount) { local { s = ""}; case theCount { 0 { s = "No more bottles"}; 1 { s = "1 more bottle"}} else { s = theCount + " bottles"}; return(s)}; on finishVerse(theCount) { local { s = "Take one down and pass it around, " + eol}; s = s + numBottles(theCount - 1) + " of beer on the wall."\ + eol + eol; return(s)}; for bottleCount = bottleStartCount downto 1 { bottleString = numBottles(bottleCount); lyrics = lyrics + bottleString + " of beer on the wall, "\ + bottleString + " of beer." + eol + finishVerse(bottleCount)}; lyrics = lyrics + "No more bottles of beer on the wall, "\ + "no more bottles of beer." + eol\ + "Go to the store and buy some more." + eol\ + "99 bottles of beer on the wall."; return(lyrics)}; theLyrics = @workspace.lyrics99; if not defined (theLyrics^) { new (wptextType, theLyrics)}; target.set (theLyrics); wp.setText(ninetyNineBottles()); edit (theLyrics); «open it in a window window.zoom("workspace.lyrics99")
Terse
\\\\\\\\ \ Beer \ \\\\\\\\ \ \ Program to print the lyrics to "99 Bottles of Beer on the Wall" \ Runs under any version of DOS, 176 byte .COM file. \ \ Written in TERSE by<EMAIL_ADDRESS>(Jim Neil). TERSE is \ an x86 specific language that has the same level of control as \ assembly, with the look-and-feel and ease-of-use of a HLL. \ \ For more information on TERSE, visit the TERSE website at: \ http://www.terse.com main Group code,data; Assume cs:main,ds:main; O Equ; code Segment byte; Org 0100h; data Segment byte; ' m0 =" Bottle$"; ' m1 =" of Beer on the Wall"; ' nl =(10,13,'$'); ' m2 =" of Beer", =(10,13); ' m3 ="Take one down and pass it around", =(10,13,'$'); data EndS; Beer Proc; cx = 99; \ cx = number to do. { \ for cx = 99..1, do... dx = O(nl); ah = 9; !21h; \ new line. al = cl; =.Bottles; \ print number and "Bottle(s)". dx = O(m1); ah = 9; !21h; \ output lyric line 1. al = cl; =.Bottles; \ print number and "Bottle(s)". dx = O(m2); ah = 9; !21h; \ output lyric lines 2-3. al = cl-; =.Bottles; \ print number - 1 and "Bottle(s)". dx = O(m1); ah = 9; !21h; \ output lyric line 4. }-.; \ loop till done... !20h; \ return to DOS. Beer EndP; \\\\\\\\\\\ \ Bottles \ \\\\\\\\\\\ \ \ Bottles prints "n Bottle(s)", controling plural based on the \ value of n passed in al. \ \ Entry Conditions: \ al = n. \ ah = Scratch; \ dx = Scratch; \ \ Exit Conditions: \ ax = scratch. \ dx = scratch. Bottles Proc; =ax; =.BinDec; \ print number of beers. dx = O(m0); ah = 9; !21h; \ output "bottle". ax=; al - 1 ? <> \ if not 1... { dl = 's'; ah = 2; !21h; }; \ make it plural. .=; \ and, return... Bottles EndP; \\\\\\\\\\ \ BinDec \ \\\\\\\\\\ \ \ BinDec prints a binary number (0-63h) in al to the screen \ in decimal with leading zero supression. \ \ Entry Conditions: \ ah = scratch. \ al = number to convert. \ dx = scratch. \ \ Exit Conditions: \ ax = scratch. \ dx = scratch. BinDec Proc Near; "*; ax + '00'; dh = al; \ split and convert, dh = save LSB. ah - '0' ? <> \ if MSB is non-zero... { dl = ah; ah = 2; !21h; }; \ then, output MSB. dl = dh; ah = 2; !21h; \ output LSB. .=; \ and return... BinDec EndP; code EndS; End Beer;
TinTin
Yet another Mud client language like tinyfugue.#nop 99 Bottles of beer for TinTin++ (Mud Client) #nop Coded 1997, Andrew Forster#var {do} {#showme} #nop (can use say if you want to sing to the mud :-) ) #alias {beer %0} {#math {wang} {%%0-1}; $do %0 bottles of beer on the wall; $do %0 bottles of beer; $do take one down, pass it around,; beerloop; nobeer;} #nop The initial part of the beer call #alias {beerloop} {bl $wang} #nop a weird way of doing it, but the only way I can see of getting the #nop maths to propagate into the beer statement. #alias {bl %0} {#loop {%%0, 2} {$do %0 bottles of beer on the wall; $do -------; $do %0 bottles of beer on the wall; $do %0 bottles of beer; $do take one down, pass it around; $do one bottle of beer on the wall}} #nop The main loop of the beer passing #alias {nobeer} {$do --------; $do one bottle of beer on the wall; $do one bottle of beer; $do take one down pass it around; $do fuck me there's no beer left; } #nop No beer left. So give up :-)
Trumpet
This is the scripting language used by the Trumpet Winsock dialer.# 99 Bottles of Beer on the Wall # Written by Andrew Turley<EMAIL_ADDRESS>$para = " bottle" $parb = " of beer on the wall," $parc = " of beer." $pard = "Take one down, pass it around," $pare = " of beer on the wall." $parf = "no bottles of beer on the wall!" $pl = "s" %beer = 99 repeat display %beer display $para if ! %beer = 1 display $pl end display $parb\n display %beer display $para if ! %beer = 1 display $pl end display $parc\n display $pard\n %beer = %beer - 1 if %beer > 0 display %beer display $para if %beer > 1 display $pl end display $pare\n end if %beer = 0 display $parf\n end display \n until %beer = 0
VICC
VICC is a Pascal-like language used in a Compilers course at Helsinki University of Technology// 99 Bottles of Beer in VICC = VICC's Intended for Compiler Courses // (C) 1996 Juha Autero DEFINE nl(tabify : Int) : Int IF tabify != 0 THEN WriteString("\n\t"); ELSE WriteString("\n"); END; RETURN 0; END; DEFINE beer(b : Int) : Int WriteInt(b); WriteString(" bottles of beer"); RETURN 0; END; DEFINE Main() : Int DEFINE i : Int; i := 99; WHILE i >= 1 DO nl(1); beer(i); WriteString(" on the wall,"); nl(1); beer(i); WriteString("."); nl(1); WriteString("Take one down, pass it around"); nl(1); beer(i - 1); WriteString(" on the wall."); nl(0); i := i - 1; DONE; END;
UltraMacros
This is a scripting language for AppleWorks word processor on the Apple ][. Run this by pressing the Solid-Apple-B key. (Code courtesy Scott Alfter<EMAIL_ADDRESS>)start B:<all><oa-q esc>1<rtn>3<rtn>1<rtn>BottlesOfBeer<rtn x=99 begin print x> bottles of beer on the wall,<rtn print x> bottles of beer,<rtn>Take one down, pass it around,<rtn x=x-1 print x> bottles of beer on the wall.<rtn rtn ifnot x=0 rpt elseoff>!
troff
Similar to nroff, this is a text-formatting language..\" .\" 99 bottles of beer. .\" [ntg]roff macro .\" Jaap Akkerhuis .\" .if n .pl 1 .nr b 99 1 .nf .ds b "of beer .ds s, " \*b on the wall, .ds t take one down, pass it around, .ds s. " \*b on the wall. .ds B " bottles .de BB .if \\nb=1 .rn BB xx \\nb\\*B\\*(s, \\nb\\*B \\*b, \\*t .if \\n-b=1 .ds B " bottle .if \\nb \\nb\\*B\\*(s. .BB .. .BB no more\*Bs\*(s.
SAUL
Home-brew language. See http://keaggy.intmed.mcw.edu/saul.html for details; ; 99 Bottles of Beer in SAUL ; (http://keaggy.intmed.mcw.edu/saul.html) ; ; RTK<EMAIL_ADDRESS>10-Apr-97 ; fixn(0) setn(n,99) :loop, putn(n) disp(` bottles of beer on the wall, `) putn(n) disp(` bottles of beer.`) putc(13) disp(`Take one down, pass it around, `) subt(n,1,m) putn(m) comp(m,1) brne(:here) disp(` bottle of beer on the wall.`) jump(:there) :here, disp(` bottles of beer on the wall.`) :there,putc(13) putc(13) comp(n,2) breq(:last) subt(n,1,n) jump(:loop) :last, disp(`1 bottle of beer on the wall, 1 bottle of beer.`) putc(13) disp(`Take one down, pass it around, `) disp(`no more bottles of beer on the wall.`) endp
Transact SQL
See also SQL./* Microsoft Transact-SQL version of the beer song ** Joseph Thoennes<EMAIL_ADDRESS>*/ set nocount on create table #beer (bottle tinyint identity) while (select isnull(max(bottle),0) from #beer) < 99 insert into #beer default values select ltrim(str(bottle)) + ' bottle' + case when bottle > 1 then 's' end + ' of beer on the wall, ' + ltrim(str(bottle)) + ' bottle' + case when bottle > 1 then 's' end + ' of beer, take ' + case when bottle > 1 then 'one' else 'it' end + ' down, pass it around, ' + case when bottle - 1 > 0 then ltrim(str(bottle - 1)) else 'no more' end + ' bottle' + case when bottle - 1 <> 1 then 's' end + ' of beer on the wall.' from #beer order by bottle desc drop table #beer
TECO
TECO is a text-editor/programming-language that looks more like line noise than something people are supposed to understand. The ^A is a literal Ctrl-A keystroke, and the ^[ is a literal ESC key.! -- TECO version of 99 Bottles of beer -- Hacked by Akira KIDA<EMAIL_ADDRESS>! hk@i# qp-1"> qp:= ^A bottles^A ' qp-1"= qp:= ^A bottle^A ' qp"= ^ANo more bottles^A ' ^A of beer^A #hxbhk @i# qnup qn< mb ^A on the wall, ^A mb ^A. Take one down, pass it around. ^A qp-1up mb ^A on the wall. ^A ># hxmhk 99un mmex^[^[
YACC
I had my own notions of how this should work, but James was nice enough to send this one, so here it is. YACC stands for "Yet Another Compiler Compiler" and it's purpose is to create compiler grammars and parse them. Conventionally, YACC should read ordered text and do something intelligent with it. In this case, the code should be driven by text that represents the beer to be consumed. C source code is generated by YACC to do the dirty work. This is a language that makes languages. Consequently, it is in a world unto itself.%{ /* ** 99 bottles of beer yacc-like ** by: James Copher<EMAIL_ADDRESS>*/ #includestatic int bottles=99; %} %union{ int bottle; } %token BOTTLES NOMORE %type beer nomore %start round %% round : beer nomore { YYACCEPT; }; beer : BOTTLES { printf("%d bottles of beer on the wall\n%d bottles of beer\n" "Take one down,\npass it around\n",$1,$1); } | beer BOTTLES { printf("%d bottle%s of beer on the wall\n\n" "%d bottle%s of beer on the wall\n%d bottle%s of beer\n" "Take one down\npass it around\n", $2,$2!=1?"s":"",$2,$2!=1?"s":"",$2,$2!=1?"s":""); }; nomore : NOMORE { printf("No more bottles of beer on the wall\n"); }; %% yyerror(){} yylex(){ if(bottles){ yylval.bottle=bottles--; return BOTTLES; } return NOMORE; } main(){ yyparse(); }
4Test
4Test is the language used for GUI testing by Segue Software's QA Partner.// 4Test Version of 99 Bottles of beer // // Eric DeCosta // testcase bottles() INTEGER bottles for (bottles = 99; bottles >0;) print("{bottles} bottle(s) of beer on the wall,") print("{bottles} bottle(s) of beer.") print("Take one down, pass it around,") print("{--bottles} bottle(s) of beer on the wall.")
SPSS
SPSS is a statistical programming language.**************************************************************************** * File: beer.sps * Source Code: SPSS 5.0 * System/OS: HP/UNIX * Written By: Keith Chidsey<EMAIL_ADDRESS>* * Write out lyrics to "99 Bottles of Beer on the Wall" to file. **************************************************************************** FILE HANDLE DUMMY/NAME'BEER.SPS'/LRECL=80 FILE HANDLE BEERSONG/NAME'BEERSONG'/LRECL=80 DATA LIST FILE=DUMMY FIXED RECORDS=1/ DUMMY(A1) STRING LYRIC1,LYRIC2,SPACE(A80) LOOP BOTTLES=99 TO 1 BY -1 COMPUTE LYRIC1=CONCAT(STRING(BOTTLES,F2), ' BOTTLES OF BEER ON THE WALL, ', STRING(BOTTLES,F2), ' BOTTLES OF BEER.') COMPUTE LYRIC2=CONCAT('TAKE ONE DOWN, PASS IT AROUND, ', STRING(BOTTLES-1,F2), ' BOTTLES OF BEER ON THE WALL.') WRITE OUTFILE=BEERSONG RECORDS=3/ LYRIC1/LYRIC2/SPACE END LOOP EXECUTE FINISH
VScript
VScript version, a script language for Virc'96/97, an IRC client for Windows 95.// BEER.VSC - Beer 1.0 // Developed under Visual IRC '96 1.00rc5a Name Beer 1.0 // Aliases Alias BEER @l $Bottle=99 while ( $Bottle > 1 ) TextOut clBlue $Bottle Bottles of beer on the wall, TextOut clBlue $Bottle Bottles of beer. $Bottle-- TextOut clBlue Take one down, pass it around, TextOut clBlue $Bottle Bottles of beer on the wall. TextOut clBlue endwhile TextOut clRed 1 Bottle of Beer on the wall, TextOut clRed 1 Bottle of Beer. TextOut clRed Take One Down, Pass it around, TextOut clRed No more bottles of Beer on the wall. -@ $Bottle EndAlias
SuperTalk
-- Here's 99 Bottles of Beer on the Wall in the -- SuperTalk language. Card field "NumberOfBottles" -- has a 99 in it but the user can change this -- before clicking on the start button. -- -- Christine Keuper -- on mouseUp repeat until cd fld "NumberOfBottles" <= 1 put cd fld "NumberOfBottles" && "bottles of beer on the wall," && cd fld "NumberOfBottles" && "bottles of beer" & RETURN & "You take one down and pass it around," && cd fld "NumberOfBottles" - 1 && "bottles of beer on the wall." & RETURN & RETURN after cd fld "lyrics" subtract 1 from cd fld "NumberOfBottles" end repeat put cd fld "NumberOfBottles" && "bottle of beer on the wall," && cd fld "NumberOfBottles" && "bottle of beer" & RETURN & "You take one down and pass it around," && cd fld "NumberOfBottles" - 1 && "bottles of beer on the wall." & RETURN & RETURN after cd fld "lyrics" subtract 1 from cd fld "NumberOfBottles" end mouseUp
SAOL
SAOL is the music-synthesis language which is part of the MPEG-4 standard. There's a homepage for SAOL at http://sound.media.mit.eduOrchestra (beer.saol) : global { srate 1000; // sip rate krate 100; // beer rate } instr beer() { ksig drink; drink = kline(99,1,1); if (drink == 0) { kdump("No bottles of beer on the wall."); kdump("Everybody's drunk!"); turnoff; } else { if (drink == 1) { kdump(drink," bottle of beer on the wall."); kdump(drink," bottle of beer."); } else { kdump(drink," bottles of beer on the wall."); kdump(drink," bottles of beer."); } kdump("Take one down, pass it around,"); if (drink-1 == 1) { kdump(drink-1," bottle of beer on the wall."); } else { kdump(drink-1," bottles of beer on the wall."); } kdump(); } } ------------ Score (beer.sasl) : 0 beer 1
Visual Foxpro
******************************************** * TAKE1DN.PRG (For Visual Foxpro) * * 99 Bottles: A simulation * * Richard Katz * *<EMAIL_ADDRESS>* ******************************************** wall=createobject("dispcontainer") wall.name="wall" clear ************************************** * First put the beer on the wall. for i=1 to 99 oname="b"+ltri(str(i)) wall.addobject(oname,"bottle") endfor ************************************** * So we can get what's in the bottles... obcont=wall.objects(1).content *************************************** * And away we go. do while wall.controlcount>0 ? wall.dispself(), "of",obcont,"on the",lower(wall.name)+"," ? wall.dispself(), "of", obcont wall.removeobject(wall.objects(wall.controlcount).name) ? wall.dispself(), "of", obcont if wall.controlcount>0 ?? ", Oh..." endif enddo define class dispcontainer as container proc dispself return ltri(str(this.controlcount))+" "+this.dispobj() proc dispobj if this.controlcount>0 obout=lower(this.objects(1).class) else obout="nothing" endif if this.controlcount<>1 obout=obout+"s" endif return obout enddefine define class bottle as custom content="beer" proc destroy ? "take one down, pass it around." endproc enddefine
ZZT
An ansi gaming language, apparently with no looping constructs. I trimmed the middle section for simplicity.- -- - --- -- ---- ---- --------------------------------<EMAIL_ADDRESS>- http://wco.com/~keebler/ | keebler/keebobler on IRC : @Beerman #cycle 1 #send chug #end :sing bottles of beer! Take one down, pass it around #sleep 1 #zap chug #send chug #end :chug 99 bottles of beer on the wall 99 #send sing #end :chug 98 bottles of beer on the wall 98 #send sing #end :chug 2 bottles of beer on the wall 2 #send sing #end :chug 1 bottles of beer on the wall 1 #send sing #end :chug No more bottles of beer on the wall, no more bottles of beer. Go to the store, buy some more, 99 bottles of beer on the wall! #die #en
Compilation Copyright 1995, 1996, 1997 Tim Robinson. All Rights Reserved
Permission to copy enthusiastically granted to instructors of computer science
(who would like to demonstrate the styles of different programming languages
to their students) provided that the names of the contributors are retained.
Back to the Funhouse


We are students of College of Computer Studies, Columban College, Olongapo City, Philippines. This app is a project for our subject "System Analysis and Design".
We made this with the inspiration of helping young children learn basic lessons in an interactive way.


Gardaí issue speed warning after driver caught going 137kph in thick fog
by By Stephen MaguireGardaí have issued a warning after a novice driver was caught speeding at 137kph last night in thick fog.
Members of the Buncrana Road Policing Unit in Co Donegal detected the driver driving at a speed of 137kph in a 100kph zone on the Letterkenny to Derry Road.
The driver will appear before the local courts in the coming weeks.
A Garda spokesman appealed to drivers to take care, especially in challenging driving conditions.
"Please be careful on the roads. Road conditions from this time of the year onwards can be unpredictable.
"Please use the fog lights on your car in foggy conditions and most importantly.....adhere to the speed limit," the spokesperson added.


The EnviroPi is a product that monitors a local environment using a Raspberry Pi B+ and sensors (camera, temp, motion, etc.) to perform logic based on outputs based on inputs, take photos, and record results to a database for later analysis.
This website helps people who are feeling unsafe, find the nearest open location and provide directions. The application has the ability to notifiying pre-loaded emergency contats that you are feeling unsafe and will track your location until you select you are safe.
You can use this site to help find a position you are interested in, it will return the national average salary for that role, and as well as a link to a hiring page for open positions for that title in the city you specified. It will also return reviews of companies from an employee with the title you specified. Once the user clicks on a company that was returned, it will then display a direct feed from Twitter with any mention of that company.


LIFE IS BEAUTIFUL A film review by Steve Rhodes Copyright 1998 Steve Rhodes RATING (0 TO ****): ** 1/2
Little Giosue (Giorgio Cantarini), around 4 years old, is locked up in a Nazi concentration camp, but he doesn't mind. It's a fun place to be, what with the contests and all. If he and his father, Guido (Roberto Benigni), can amass enough points for proper behavior, they can win the grand prize -- their very own armored tank.
Welcome to the wild and wacky world of writer, director and actor Roberto Benigni as he takes a comic's eye view of the Holocaust in LIFE IS BEAUTIFUL (LA VITA E BELLA).
(This is the second time in two days that I've screened motion pictures with a Holocaust theme. Yesterday's screening had Stephen King using it as the subject for a horror picture in APT PUPIL. And today's LIFE IS BEAUTIFUL takes a humorous view of the same topic. Personally, I much prefer the serious treatment it got in THE LONG WAY HOME that I saw a couple of weeks ago.)
Regardless of how it sounds, Roberto Benigni, one of Italy's favorite funnymen, treats the biggest tragedy of this century with respect. The film, thank goodness, moves away from its slapstick first hour to a poignant second that is its salvation.
Starting just before the outbreak of the Second World War, the movie shows Fascist Italy in its most handsome light. The sets are sumptuous, the gowns are elegant and the cinematography stunning. The jokes, however, are such old-fashioned slapstick that they are almost never funny. Eggs accidentally breaking on unsuspecting heads and dresses inadvertently ripped by clumsy feet are such old sight gags that it is hard for them to even generate smiles, much less laughs.
The good-spirited film tries hard, perhaps too hard, to charm its audience. It works so hard at being cute that it forgets to be funny.
 It is there that Guido hides his son and invents the prize cover-up to mask the hopelessness of their situation. Even in the camp, Guido still hams it up to keep up his son's spirits.
The movie's relentlessly happy music will put you in such a pleasant mood that the scenes of the "shower" changing rooms may seem almost harmless. And the Nazis appear a lot nicer than they usually do. Rather than burning Jewish shops, they paint one of their horses a bright lime green and put the words "Achtung Jewish Horse" on it.
Fans of the Roberto Benigni brand of physical humor will undoubtedly love LIFE IS BEAUTIFUL. Others may want more.
LIFE IS BEAUTIFUL runs 2:02. The film is in Italian with English subtitles. It is rated PG-13 for holocaust-related thematic elements and would be fine for kids around 12 and up.
Email<EMAIL_ADDRESS>Web: www.InternetReviews.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


As I was looking for Indian maps on the internet I realized that good Indian maps for cities, administrative boundaries etc are hard to find.
Curently the repository has Administrative maps of India and ward level maps of Mumbai and Chennai. With a little bit of help, I could turn this into a decent repository for Indian maps, or submit these maps to another better managed (and more complete) repository. In short this is just a start!


Breakfast agreeable incommode departure it an.  Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill.
Breakfast agreeable incommode departure it an.  Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill.
Breakfast agreeable incommode departure it an.  Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill.
Breakfast agreeable incommode departure it an.  Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill.
Breakfast agreeable incommode departure it an.  Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill.
Breakfast agreeable incommode departure it an.  Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill.
Breakfast agreeable incommode departure it an.  Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill.
Breakfast agreeable incommode departure it an.  Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill.
Breakfast agreeable incommode departure it an.  Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill.
Breakfast agreeable incommode departure it an.  Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill.
Breakfast agreeable incommode departure it an.  Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill.
If you’re lucky enough to have the Taboo game at home, then you can use that. Otherwise you will need some cards with a word on the one side, and 5 taboo words on the other side. You will also need a timekeeper, like an hourglass, and a buzzer. A pen and paper for scorekeeping is also a good idea. This is a group game, so you’ll need an even number of players between 4 and 10.
How to Play Taboo
1.Divide up into teams of two and sit in a circle around the board.
2.The team who goes first decides on who the ‘giver’ will be in that team. The giver will then draw a card and attempt to describe the word to his teammate.
3.On the back of the card he has drawn there will be 5 taboo words. The giver may not say any of these words when describing the object to his teammate. He may also not say any part of the taboo words. Wikipedia gives a great example: if you have to describe ‘baseball’, the taboo words might be ‘sport, game, pastime, hitter, pitcher, and baseball’. You may not say any of these words or parts thereof, like ‘base’ or ‘ball’ or ‘pitch’, etc.
4.The giver may only describe this object by using his speech; no gestures, drawings, or sounds are allowed. The words may also not rhyme with any of the taboo words.
5.If a giver says a taboo word, a player on the other team will hit a buzzer and the giver must move on to a new word.
6.The teammate of the giver may guess as many times as he wants to, and as soon as he guesses correctly, the giver will then move on to the next word. When time runs out, it will be next team’s turn.
7.The goal is to get as many words correct in the allotted amount of time. One point will be awarded for a correct word and one penalty point if a taboo word is said.


Arch Install Guide
Created Saturday 10 July 2021
NOTE: This is how I set up a base arch install. It's mostly stuff from the wiki with a couple of quirks/additions that suit me. You're free to go through it, but I recommend using the Official installation guide as your first (and perhaps single) source of truth, since it is supported and constantly upgraded.
I also end up using archfi more nowadays, so I don't always bother with this.
ping -c 3 google.com
timedatectl set-ntp true
pacman -Syy
pacman -S reflector
reflector -c "India" -f 12 -l 10 -n 12 --save /etc/pacman.d/mirrorlist
fdisk -l
cfdisk /dev/sda
dos
make bootable primary (/dev/sda1) and swap (/dev/sda2)
write, quit
mkfs.ext4 /dev/sda1
mkswap /dev/sda2
swapon /dev/sda2
mount /dev/sda1 /mnt
pacstrap -i /mnt base base-devel
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt /bin/bash
ln -sf /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
hwclock --systohc
nano /etc/locale.gen
uncomment en-us UTF8
locale-gen
nano /etc/locale.conf
LANG=en_US.UTF-8
echo archPC > /etc/hostname
nano /etc/hosts
<IP_ADDRESS> localhost.localdomain archPC
systemctl enable dhcpcd
passwd
pacman -S intel-ucode
pacman -S grub
grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
exit
umount -R /mnt
reboot
Boot Existing OS
username root
password whatever was set
useradd -m -g users -G wheel -s /bin/bash username
passwd username
EDITOR=nano visudo
uncomment %wheel ALL=(ALL) ALL
exit
login as username
sudo pacman -S pulseaudio pulseaudio-alsa
sudo pacman -S xorg xorg-apps xorg-xinit
install your favourite desktop environment from https://www.youtube.com/watch?v=P4IV5BYPiPs from 4:40 onwards
Backlinks: Linux Stuff


Extensible class instrumentation.
The sqlalchemy.ext.instrumentation package provides for alternate systems of class instrumentation within the ORM. Class instrumentation refers to how the ORM places attributes on the class which maintain data and track changes to that data, as well as event hooks installed on the class.
Note
The extension package is provided for the benefit of integration with other object management packages, which already perform their own instrumentation. It is not intended for general use.
For examples of how the instrumentation extension is used, see the example Attribute Instrumentation.
Changed in version 0.8: The sqlalchemy.orm.instrumentation was split out so that all functionality having to do with non-standard instrumentation was moved out to sqlalchemy.ext.instrumentation. When imported, the module installs itself within sqlalchemy.orm.instrumentation so that it takes effect, including recognition of __sa_instrumentation_manager__ on mapped classes, as well instrumentation_finders being used to determine class instrumentation resolution.
Attribute, elects custom instrumentation when present on a mapped class.
Allows a class to specify a slightly or wildly different technique for tracking changes made to mapped attributes and collections.
Only one instrumentation implementation is allowed in a given object inheritance hierarchy.
The value of this attribute must be a callable and will be passed a class object. The callable must return one of:
- An instance of an InstrumentationManager or subclass
- An object implementing all or some of InstrumentationManager (TODO)
- A dictionary of callables, implementing all or some of the above (TODO)
- An instance of a ClassManager or subclass
This attribute is consulted by SQLAlchemy instrumentation resolution, once the sqlalchemy.ext.instrumentation module has been imported. If custom finders are installed in the global instrumentation_finders list, they may or may not choose to honor this attribute.
User-defined class instrumentation extension.
InstrumentationManager can be subclassed in order to change how class instrumentation proceeds. This class exists for the purposes of integration with other object management frameworks which would like to entirely modify the instrumentation methodology of the ORM, and is not intended for regular usage. For interception of class instrumentation events, see InstrumentationEvents.
The API for this class should be considered as semi-stable, and may change slightly with new releases.
Changed in version 0.8: InstrumentationManager was moved from sqlalchemy.orm.instrumentation to sqlalchemy.ext.instrumentation.
An extensible sequence of callables which return instrumentation implementations
When a class is registered, each callable will be passed a class object. If None is returned, the next finder in the sequence is consulted. Otherwise the return must be an instrumentation factory that follows the same guidelines as sqlalchemy.ext.instrumentation.INSTRUMENTATION_MANAGER.
By default, the only finder is find_native_user_instrumentation_hook, which searches for INSTRUMENTATION_MANAGER. If all finders return None, standard ClassManager instrumentation is used.
Bases: sqlalchemy.orm.instrumentation.InstrumentationFactory
Extends InstrumentationFactory with additional bookkeeping, to accommodate multiple types of class managers.


--- author: Nathaniel categories: [] date: "2014-07-22T01:38:59Z" meta: _edit_last: "1" pe_theme_meta: O:8:"stdClass":2:{s:7:"gallery";O:8:"stdClass":3:{s:2:"id";s:2:"89";s:5:"width";s:0:"";s:6:"height";s:0:"";}s:5:"video";O:8:"stdClass":1:{s:2:"id";s:2:"63";}} tumblr_landlaborcapital_id: "92486602152" tumblr_landlaborcapital_permalink: http://landlaborcapital.tumblr.com/post/92486602152/a-great-little-bit-on-the-practice-work-style-of published: true status: publish tags: - friends - productivity. - punks - routines - Work title: "" type: post ---
A great little bit on the practice/work style of my friend, Erin Riley, a textile artist. (http://www.emptykingdom.com/featured/one-piece-of-art-erin-riley/)
How do you start your day? Is there something you do every morning?
I usually just make sure I have a decent amount of coffee and water within reach and make sure I have all the colors I need to work for a while. I turn on all the lights, fans, take my vitamins, check my email and then get to weaving.


{% load static %}
Argon Dashboard - Free Dashboard for Bootstrap 4
Dashboard
Global Market
Account
User
Welcome!
My profile
Settings
Activity
Support
Logout


This house has gone viral for having an extreme amount of plug sockets
There’s nothing better than having a plug socket close to the side of your bed or the sofa – so you can charge your phone, put in your computer cable or tend to any other electronic needs.
But a house in Middlesex, UK, has gone viral for taking this concept and running with it. One eagle-eyed Twitter user must have been cruising house listings and noticed something particularly unusual about this Pinner home…
Toby Davies is obviously being sarcastic, because when you scroll through the pictures of the house, the main thing that stands out is sockets – and lots of them.
In some rooms, the plug holes form neat lines around the walls.
And in others, the layout feels much more random.
Even the conservatory has a whole lot of plugs spaced closely together.
Seemingly everywhere you look is a socket or two.
sss
Andrew Pearce is the estate agent for the listing, and calls it a “family haven, situated in a family-friendly location” near Eastcote Station and Pinner High Street in north-west London.
As well as a whole lot of sockets, the house has five bedrooms, three bathrooms, a conservatory and a garden.
The unusual additions to the house have been met with equal part humour and confusion.
Some people have started coming up with their own theories to explain why there are so many sockets…
A representative from Andrew Pearce says: “This property has attracted over 330,000 views on Rightmove since it’s been mentioned on Twitter over the weekend. We have been inundated with enquiries from both genuine buyers and inquisitive members of the public, asking why so many sockets.
“Our client purchased the house in 2014 in its current form and commented that when furniture is in place, the sockets are less visible. The client will address the removal of sockets should that form part of any negotiations with a perspective buyer.”
If you’re interested in purchasing a house with a socket for every appliance you own, you’ll have to move quickly. The Andrew Pearce spokesperson says: “Despite some of the negative comments, the property is currently going through negotiations and we are anticipating a sale will be agreed shortly. We would encourage any genuine purchasers to get in touch as soon as possible.”
Oh, and you’ll have to come up with £1,350,000 (€1,562,807) for the house. Not to mention the electricity bills…
READ MORE
There's a four-course chocolate and wine dinner being served in Cork


Seek The Beat Within, By Hearing The Beat Without
Find Out MoreNever miss an Upcoming Artist, from new tracks, to new info. We have you from your head banging to your toe tapping in every arena of genre.
Speakers On!Because change can be a great thing! Here you can find all the newest updates from artists that are making their mark on the fluctuating industry.
for every genre with more options than one can comprehend. We dig to make the most elite Playlists.
Find out where your sounds will vibrate next, and where classics and legends still live on.
We give you the deets, tweets, and the front row seats to feed your hunger for more. With or without the candy bars.
Ready to get your name in lights? Fill out the subscription form below along with a track clip or link to a video or clip and we'll put you in the polls.
123-456-6789


>
Asking Good Questions
July 31, 2014
> Conflict Strategies
July 22, 2014
> Values
July 20, 2014
> The Stereotype Threat
July 10, 2014
> Pairing >> Feedback
July 6, 2014
> Tech's E-Waste Problem
June 28, 2014
> Thinking Style Reflections
June 16, 2014
> The DBC Experience
June 7, 2014
July 31, 2014
> Conflict Strategies
July 22, 2014
> Values
July 20, 2014
> The Stereotype Threat
July 10, 2014
> Pairing >> Feedback
July 6, 2014
> Tech's E-Waste Problem
June 28, 2014
> Thinking Style Reflections
June 16, 2014
> The DBC Experience
June 7, 2014
>
What is Rails?
July 25, 2014
> SQL v. NoSQL
July 18, 2014
> Classes v. Modules
July 13, 2014
> Enumerables: Each v. Map
June 29, 2014
> Why is JavaScript so Popular?
June 19, 2014
> Display: Inline v. Block
June 15, 2014
> Wireframing
June 7, 2014
> Website Analysis
June 6, 2014
July 25, 2014
> SQL v. NoSQL
July 18, 2014
> Classes v. Modules
July 13, 2014
> Enumerables: Each v. Map
June 29, 2014
> Why is JavaScript so Popular?
June 19, 2014
> Display: Inline v. Block
June 15, 2014
> Wireframing
June 7, 2014
> Website Analysis
June 6, 2014


Your plan
Pay as you go $40
Last Day of service
12/17/2018
First Name:         Bibata
Last Name:         Rabba
Email address:   myemail.gmail.com
Contact Number:<PHONE_NUMBER>