csys: program as combination of stages and transitions; common proc for different stages

This commit is contained in:
Helmut Merz 2026-05-12 19:36:32 +02:00
parent a7af69381b
commit d13962c02b
2 changed files with 23 additions and 8 deletions

View file

@ -10,26 +10,40 @@ defmodule Scopes.CSys.Program do
def basic_prog() do def basic_prog() do
default = &basic_active/2 default = &basic_active/2
%{default: default, stages = %{
initial: default, default: default,
initial: &basic_initial/2,
active: default, active: default,
retired: default retired: default
} }
transitions = %{
restart: :initial,
retire: :retired,
next: [initial: :active, active: :retired]
}
{stages, transitions}
end end
# processors # basic processors
def basic_active(msg = {head, _info}, scope) do def basic_initial(msg, scope) do
basic(msg, scope, {:initial, basic_prog()})
end
def basic_active(msg, scope) do
basic(msg, scope, {:active, basic_prog()})
end
def basic(msg = {head, _info}, scope, _meta) do
case head do case head do
[:csys, :create, :pred | _rest] -> create_pred(scope) [:csys, :create, :pred | _rest] -> create_pred(scope)
[:csys, :create, :succ | _rest] -> create_succ(scope) [:csys, :create, :succ | _rest] -> create_succ(scope)
#[:csys, :next | _rest] -> CSys.update_neuron({state, &basic_active/2, syns, env}) #[:csys, :next | _rest] -> next(scope, meta)
#[:csys, :next | _rest] -> next(:active, scope)
_ -> forward(msg, scope) || notify(msg, scope) _ -> forward(msg, scope) || notify(msg, scope)
end end
end end
def basic_active(msg, scope) do def basic(msg, scope, _meta) do
forward(msg, scope) || notify(msg, scope) forward(msg, scope) || notify(msg, scope)
end end

View file

@ -19,7 +19,8 @@ defmodule Scopes.CSysTest do
describe "basic:" do describe "basic:" do
test "minimal-neural-net" do test "minimal-neural-net" do
zero = Environ.setup(Program.basic_prog()[:initial]) {stages, _trans} = Program.basic_prog()
zero = Environ.setup(stages[:initial])
#Actor.send(zero, "Hello Zero!") #Actor.send(zero, "Hello Zero!")
CSys.send_value(zero, "Hello Zero!") CSys.send_value(zero, "Hello Zero!")
assert "Hello Zero!" = receive_data().value assert "Hello Zero!" = receive_data().value