From: Anders Janmyr Date: 2005-11-24T01:11:26+09:00 Subject: Continuations Hello Everyone, I am trying to come to terms with continuations and I am failing miserably. I have a method "traverse" which basically is a traversal algorithm for a sudoko game. To learn more about continuations I tried to write one that used continuations instead: traverse_cc. This does not work at all. I have tried many different usages but the main problem seems to be that the local variable state is not restored when the continuation is called. I thought that it was supposed to do that. Any help will be appreciated Regards Anders def traverse(debug) @solve_count += 1 print "F" if debug return true if @available_positions.empty? position = @available_positions.pop position.reset position.possible_numbers.each do |num| position.place(num) return true if traverse(debug) end position.place(nil) @available_positions.push position print "B" if debug return false end def traverse_cc(debug) $c_stack = [] available_positions = @available_positions.dup position = nil possible_numbers = nil until (available_positions.empty?) @solve_count += 1 callcc do |cont| $c_stack.push cont print "F" if debug position = available_positions.pop position.reset end possible_numbers = position.possible_numbers if possible_numbers.empty? print "pop #{available_positions.size}:# {possible_numbers.size}:#{$c_stack.size}\n" $c_stack.pop.call else num = possible_numbers.pop position.place(num) end print "#{available_positions.size}:#{possible_numbers.size}:# {$c_stack.size}, " end return true end