Execute HQ9+/Ruby: Difference between revisions
Content added Content deleted
m (implementation) |
m (Categorization now in master page) |
||
Line 1: | Line 1: | ||
{{implementation|HQ9+}}{{collection|RCHQ9+}} |
{{implementation|HQ9+}}{{collection|RCHQ9+}} |
||
This [[Ruby]] program implements an [[HQ9+]] interpreter. |
|||
<lang ruby>class HQ9plus |
<lang ruby>class HQ9plus |
||
def initialize(opts={}) |
def initialize(opts={}) |
Revision as of 20:38, 30 December 2009
Execute HQ9+/Ruby is an implementation of HQ9+.
Other implementations of HQ9+.
Execute HQ9+/Ruby is part of RCHQ9+. You may find other members of RCHQ9+ at Category:RCHQ9+.
This Ruby program implements an HQ9+ interpreter. <lang ruby>class HQ9plus
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 dispatch = Hash.new(:unknown) dispatch['h'] = :hello dispatch['q'] = :quine dispatch['9'] = :beer dispatch['+'] = :accumulate
@program.downcase.each_char do |char| self.send dispatch[char] end 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</lang>
Output:
+qhp;+9Q Hello, world! 99 bottles here ... +qhp;+9Q 2