csys: work in progress: Environ: + initialization sequence for system setup
This commit is contained in:
parent
998be76e34
commit
38207ab8d9
3 changed files with 16 additions and 11 deletions
|
|
@ -82,11 +82,9 @@ defmodule Scopes.CSys do
|
|||
# helpers
|
||||
|
||||
def compose(ops) do
|
||||
fn msg ->
|
||||
for op <- ops, reduce: msg do
|
||||
&(for op <- ops, reduce: &1 do
|
||||
nil -> nil
|
||||
val -> op.(val)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,8 +3,12 @@ defmodule Scopes.CSys.Environ do
|
|||
alias Scopes.CSys
|
||||
alias Scopes.Shape
|
||||
|
||||
def setup({state, proc}) do
|
||||
scope = {[], &proc_env/2, [], self()}
|
||||
defmodule State do
|
||||
defstruct [neurons: [], init_seq: []]
|
||||
end
|
||||
|
||||
def setup({state, proc}, seq \\ []) do
|
||||
scope = {%State{init_seq: seq}, &proc_env/2, [], self()}
|
||||
env = CSys.neuron(scope)
|
||||
CSys.create(Shape.create([:csys, :zero]), {state, proc, [], env})
|
||||
env
|
||||
|
|
@ -12,14 +16,17 @@ defmodule Scopes.CSys.Environ do
|
|||
|
||||
def proc_env(msg, scope) do
|
||||
case Shape.head(msg) do
|
||||
[:csys, :created | _rest] -> register_creation(msg, scope)
|
||||
[:csys, :created | _rest] -> process_creation(msg, scope)
|
||||
_ -> nil
|
||||
end
|
||||
send(CSys.env(scope), msg)
|
||||
end
|
||||
|
||||
def register_creation(msg, {state, proc, syns, env}) do
|
||||
def process_creation(msg, {state, proc, syns, env}) do
|
||||
new = Shape.data(msg).new
|
||||
CSys.update({[new | state], proc, syns, env})
|
||||
neurons = [new | state.neurons]
|
||||
{step, seq} = List.pop_at(state.init_seq, 0)
|
||||
if step, do: step.(neurons)
|
||||
CSys.update({%{state | neurons: neurons, init_seq: seq}, proc, syns, env})
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ defmodule Scopes.CSysTest do
|
|||
CSys.send_message(two, [:csys, :create, :pred])
|
||||
three = receive_data([:csys, :created]).new
|
||||
CSys.send_message(three, [:csys, :connect], %{target: zero})
|
||||
Process.sleep(2)
|
||||
Process.sleep(3)
|
||||
CSys.send_value(three, 3)
|
||||
assert receive_data().value in [2, 3]
|
||||
assert receive_data().value in [2, 3]
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue