⚠️ Warning: This is a draft ⚠️
This means it might contain formatting issues, incorrect code, conceptual problems, or other severe issues.
If you want to help to improve and eventually enable this page, please fork RosettaGit's repository and open a merge request on GitHub.
{{implementation|HQ9+}}{{collection|RCHQ9+}} This [[Ruby]] program implements an [[HQ9+]] interpreter.
class HQ9plus
Dispatch = Hash.new(:unknown).merge({
'h' => :hello,
'q' => :quine,
'9' => :beer,
'+' => :accumulate
})
def initialize(opts={})
@program = if opts[:program] then opts[:program]
elsif opts[:filename] then File.read(opts[:filename])
else ''
end
@accumulator = 0
end
attr_reader :accumulator
def run
@program.downcase.each_char {|char| self.send Dispatch[char]}
end
def hello
puts "Hello, world!"
end
def quine
puts @program
end
def beer
puts '99 bottles here ...'
end
def accumulate
@accumulator += 1
end
def unknown
# do nothing
end
end
hq9 = HQ9plus.new(:program => '+qhp;+9Q')
hq9.run
puts hq9.accumulator
Output:
+qhp;+9Q
Hello, world!
99 bottles here ...
+qhp;+9Q
2