#lang racket
(define control_central%
  (class object%
    ;;field: propiedades estructurales
    (field
     (accion #f)
     )
    ;;;;;;;;;;;;;;;;;;;;
    (define/public proceso!
      (lambda (output_receptor last-action)
        (set! accion (sensacion->accion output_receptor last-action))
        (values accion)
        ))
    (define/public sensacion->accion;;distingue entre comidas y obstáculos, a fortiori, si hay otro, hay otros
      (lambda (out_sensitivo last-action)
        (define par
          (lambda (lista index)
            (list-ref lista index)
            ))
        (let go ((i 0)
                 (j 8)
                 (comidas '())
                 (otros '())
                 )
          (if (= i j)
              (if (null? comidas)
                  (if last-action last-action (last otros));(if last-action last-action (if (= (random 2) 0) (last otros) (first otros)))
                  (first comidas)
                  )
              (cond
                ((equal? (par out_sensitivo i) (cons 1 1))
                 (go (add1 i) j (cons i comidas) otros))
                ((equal? (par out_sensitivo i) (cons 0 1))
                 (go (add1 i) j comidas otros))
                (else
                 (go (add1 i) j comidas (cons i otros)))
                )
              )
          )
        ))
    (super-new)
    ))
;;;;;;;;;;;
(define cerebro (make-object control_central%))


(provide cerebro)
