From: Morton Goldberg Date: 2007-12-06T12:25:34+09:00 Subject: Re: Lambda funcs that call gets won't halt program execution? 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. #! /usr/bin/env ruby -w $stack = [] $instructions = {} instructions = $instructions stack = $stack require "xtest" instructions["&"].call p stack 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) } So I wonder: what in your code that you are _not_ showing us is messing you up? Regards, Morton