Execute HQ9+: Difference between revisions

Content added Content deleted
(Added an Algol W sample)
Line 54: Line 54:
hq9( code )
hq9( code )
END</lang>
END</lang>

=={{header|ALGOL W}}==
Based on ALGOL 68 (which is a translation of DWScript)...
<lang algolw>begin

procedure writeBottles( integer value bottleCount ) ;
begin
write( bottleCount, " bottle" );
if bottleCount not = 1 then writeon( "s " ) else writeon( " " );
end writeBottles ;

procedure hq9 ( string(32) value code % code to execute %
; integer value length % length of code %
) ;
for i := 0 until length - 1 do begin
string(1) op;

% the increment-only accumulator %
integer hq9accumulator;

hq9accumulator := 0;
op := code(i//1);

if op = "Q" or op = "q" then write( code )
else if op = "H" OR op = "h" then write( "Hello, World!" )
else if op = "9" then begin
% 99 bottles of beer %
i_w := 1; s_w := 0;
for bottles := 99 step -1 until 1 do begin
writeBottles( bottles ); writeon( "of beer on the wall" );
writeBottles( bottles ); writeon( "of beer" );;
write( "Take one down, pass it around," );
if bottles > 1 then begin
writeBottles( bottles - 1 ); writeon( "of beer on the wall." )
end;
write()
end;
write( "No more bottles of beer on the wall." )
end
else if op = "+" then hq9accumulator := hq9accumulator + 1
else write( """", op, """ not implemented" )
end hq9 ;


% test the interpreter %
begin
string(32) code;
integer codeLength;
write( "HQ9+> " );
read( code );
codeLength := 31;
while codeLength >= 0 and code(codeLength//1) = " " do codeLength := codeLength - 1;
hq9( code, codeLength + 1 )
end
end.</lang>


=={{header|Applesoft BASIC}}==
=={{header|Applesoft BASIC}}==