All pastes #435106 Raw Edit

prueba de fsm

public ruby v1 · immutable
·published 2007-04-11 19:38 UTC
rendered paste body
require 'fsm'class FilosofoChino  def initialize()    @veces_come = 10    @veces_piensa = 0    initial_transition = Transition.new('comiendo', proc { puts "Agarra palitos" })    q0 = State.new([                     Transition.new('comiendo', method(:comer), lambda { puede_comer? }),                     Transition.new('pensando', method(:pasar_a_pensar), lambda { !puede_comer? })                   ], proc { false })    q1 = State.new([                     Transition.new('pensando', method(:pensar), lambda { puede_pensar? }),                     Transition.new('comiendo', method(:pasar_a_comer), lambda { !puede_pensar? })                   ], proc { false })    states = { 'comiendo' => q0, 'pensando' => q1 }    @fsm = FSM.new(initial_transition, states)  end  def puede_comer?    @veces_come > 0  end  def puede_pensar?    @veces_piensa > 0  end  def pensar(f,t)    puts "Filosofo piensa. Piensa #{@veces_piensa} mas veces.";    @veces_piensa -= 1  end  def comer(f,t)    puts "Filosofo come. Come #{@veces_come} mas veces.";    @veces_come -= 1  end  def pasar_a_pensar(f,t)    puts "Suelta los palitos. Empieza a pensar."    @veces_piensa = 10  end  def pasar_a_comer(f,t)    puts "Deja de pensar. Agarra los palitos."    @veces_come = 10  end  def run    while true      puts "step"      @fsm.process      sleep(0.5)    end  endendf = FilosofoChino.new()f.run