CSys.Environ: State with two-level cell registry (work in progress
This commit is contained in:
parent
dee9cb6a6f
commit
f8a767db50
2 changed files with 26 additions and 12 deletions
|
|
@ -4,7 +4,7 @@ defmodule Scopes.CSys.Environ do
|
||||||
alias Scopes.Shape
|
alias Scopes.Shape
|
||||||
|
|
||||||
defmodule State do
|
defmodule State do
|
||||||
defstruct [neurons: [], names: %{}, init_seq: []]
|
defstruct [neurons: [], cells: %{}, init_seq: []]
|
||||||
end
|
end
|
||||||
|
|
||||||
def setup({state, proc}, seq \\ []) do
|
def setup({state, proc}, seq \\ []) do
|
||||||
|
|
@ -25,14 +25,21 @@ defmodule Scopes.CSys.Environ do
|
||||||
def process_creation(msg, {state, proc, syns, env}) do
|
def process_creation(msg, {state, proc, syns, env}) do
|
||||||
data = Shape.data(msg)
|
data = Shape.data(msg)
|
||||||
new = data.new
|
new = data.new
|
||||||
|
addr = data[:addr]
|
||||||
|
cells = if addr do
|
||||||
|
[dom, cat, item] = addr
|
||||||
|
Map.update(state.cells, {dom, cat}, %{item => new},
|
||||||
|
fn x -> Map.put(x, item, new) end)
|
||||||
|
else
|
||||||
|
state.cells
|
||||||
|
end
|
||||||
neurons = [new | state.neurons]
|
neurons = [new | state.neurons]
|
||||||
names = data[:name] && Map.put(state.names, data.name, new) || state.names
|
|
||||||
{step, seq} = List.pop_at(state.init_seq, 0)
|
{step, seq} = List.pop_at(state.init_seq, 0)
|
||||||
state1 = %State{neurons: neurons, names: names, init_seq: seq}
|
state1 = %State{neurons: neurons, cells: cells, init_seq: seq}
|
||||||
CSys.update({state1, proc, syns, env})
|
CSys.update({state1, proc, syns, env})
|
||||||
if step do
|
if step do
|
||||||
Process.sleep(1)
|
Process.sleep(1)
|
||||||
step.(neurons)
|
step.(env, state1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
defmodule Scopes.CSys.Program do
|
defmodule Scopes.CSys.Program do
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
alias Scopes.CSys
|
alias Scopes.CSys
|
||||||
|
alias Scopes.CSys.Environ
|
||||||
alias Scopes.Shape
|
alias Scopes.Shape
|
||||||
|
|
||||||
defmodule State do
|
defmodule State do
|
||||||
|
|
@ -133,12 +135,17 @@ alias Scopes.CSys
|
||||||
# demo init sequences
|
# demo init sequences
|
||||||
|
|
||||||
def init_seq_b1() do [
|
def init_seq_b1() do [
|
||||||
fn [zero | _ns] -> CSys.send_message(zero, ~w(csys create pred)a,
|
fn _env, %Environ.State{neurons: [zero]} ->
|
||||||
%{op: [CSys.data_only(), negate()]}) end,
|
CSys.send_message(zero, ~w(csys create pred)a,
|
||||||
fn [one | _ns] -> CSys.send_message(one, ~w(csys create succ)a,
|
%{op: [CSys.data_only(), negate()]})
|
||||||
%{op: CSys.data_only()}) end,
|
end,
|
||||||
fn [two | _ns] -> CSys.send_message(two, ~w(csys create pred)a) end,
|
fn _env, %Environ.State{neurons: [one | _ns]} ->
|
||||||
fn [three | others] ->
|
CSys.send_message(one, ~w(csys create succ)a, %{op: CSys.data_only()})
|
||||||
|
end,
|
||||||
|
fn _env, %Environ.State{neurons: [two | _ns]} ->
|
||||||
|
CSys.send_message(two, ~w(csys create pred)a)
|
||||||
|
end,
|
||||||
|
fn _env, %Environ.State{neurons: [three | others]} ->
|
||||||
zero = List.last(others)
|
zero = List.last(others)
|
||||||
CSys.send_message(three, ~w(csys connect)a, %{target: zero})
|
CSys.send_message(three, ~w(csys connect)a, %{target: zero})
|
||||||
end
|
end
|
||||||
|
|
@ -146,7 +153,7 @@ alias Scopes.CSys
|
||||||
end
|
end
|
||||||
|
|
||||||
def init_recursive_1() do [
|
def init_recursive_1() do [
|
||||||
fn [zero] ->
|
fn _env, %Environ.State{neurons: [zero]} ->
|
||||||
CSys.send_message(zero, ~w(csys connect)a, %{target: zero, op: negate()})
|
CSys.send_message(zero, ~w(csys connect)a, %{target: zero, op: negate()})
|
||||||
CSys.send_message(zero, ~w(csys create succ)a, %{name: ~w(csys e01 001)a})
|
CSys.send_message(zero, ~w(csys create succ)a, %{name: ~w(csys e01 001)a})
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue