Morton Goldberg
12/6/2007 3:26:00 AM
On Dec 5, 2007, at 5:52 PM, Tomas Pospisek's Mailing Lists wrote:
> On Thu, 6 Dec 2007, Peter Bunyan wrote:
>
>> Once again, a problem with my Befunge interpreter. I'm trying to
>> implement the ~ and & functions - get a character and a number,
>> respectively. My & function looks like this:
>> instructions["&"] = lambda { print "Number: "; stack.push
>> gets().strip.to_i}
>>
>> But it complains about gets() being nil. as soon as the function
>> is run.
>> Well, of course it is. It has let me type. Is there anyway to make it
>> halt?
>
> This works for me:
>
> i= {}
> s= []
> i["&"] = lambda {
> print "Number: "
> s.push( gets().strip.to_i ) }
>
> i['&'].call
> puts "Evaluating stack: #{s.pop}"
>
> Gives:
>
> -> Number:
> 123
> -> Evaluating stack: 123
And this very similar code works just fine for me.
<code test.rb>
#! /usr/bin/env ruby -w
$stack = []
$instructions = {}
instructions = $instructions
stack = $stack
require "xtest"
instructions["&"].call
p stack
</code>
<code xtest.rb>
instructions = $instructions
stack = $stack
instructions["+"] = lambda { |a, b| stack.push(a + b) }
instructions["-"] = lambda { |a, b| stack.push(b - a) }
instructions["&"] = lambda { print("Number: "); stack.push
(gets.chomp.to_i) }
</code>
So I wonder: what in your code that you are _not_ showing us is
messing you up?
Regards, Morton