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}}== |