with
  DC_Keyb,
  DC_Scrn;

package body Neuron is
---------------------------------------------------------------------------
---------------------------------------------------------------------------

procedure Initialize ( Neuron: in out Neuron_Type ) is
---------------------------------------------------------------------------
  Neuron_Init: Neuron_Type ( Neuron.Synapse_Weight'last );
begin
  Neuron := Neuron_Init;
end Initialize;

procedure Show_State ( Neuron: in Neuron_Type ) is
---------------------------------------------------------------------------
begin
  for index in Neuron.Synapse_Input'range loop
    DC_Scrn.Put ( "  Synapse_Input"  & integer'image ( index ) & ":  " );
    DC_Scrn.PutL ( Neuron.Synapse_Input  ( index ) );
  end loop;
  for index in Neuron.Synapse_Weight'range loop
    DC_Scrn.Put ( "  Synapse_Weight" & integer'image ( index ) & ":  " );
    DC_Scrn.PutL ( Neuron.Synapse_Weight ( index ) );
  end loop;
  DC_Scrn.Put ( "  Threshhold:  " );
  DC_Scrn.PutL ( Neuron.Threshhold );
  DC_Scrn.Put ( "  Axon_Output:  " );
  DC_Scrn.PutL ( Neuron.Axon_Output );
end Show_State;


procedure Think ( Neuron: in out Neuron_Type ) is
---------------------------------------------------------------------------
  Sum: float := 0.0;
begin
  for index in Neuron.Synapse_Weight'range loop
    Sum := Sum
      + Neuron.Synapse_Weight ( index ) * Neuron.Synapse_Input ( index );
  end loop;
  if Sum >= Neuron.Threshhold then
    Neuron.Axon_Output := 1.0;
  else
    Neuron.Axon_Output := 0.0;
  end if;
end Think;

---------------------------------------------------------------------------
---------------------------------------------------------------------------
end Neuron;