Stateful machine
A stateful machine is a machine that uses past output to create novel output.
<graph> {
"$schema": "https://vega.github.io/schema/vega/v5.json", "width": 400, "height": 200, "data": [ { "name": "nodes", "values": [ {"id": 3, "label": "machine"} ] }, { "name": "links", "values": [ {"id": 0, "source": 0, "target": 1, "label": "inputs", "path": "M0,100L200,100", "arrow": {"x": 200, "y": 100, "offset": {"x": -5, "y": 0}}}, {"id": 3, "source": 2, "target": 0, "label": "feedback", "path":"M300,100L500,100", "arrow": {"x": 150, "y": 100, "offset": {"x": 0, "y": -5}}}, {"id": 6, "source": 1, "target": 2, "label": "outputs", "path":"M350,100L350,25L150,25L150,100", "arrow": {"x": 500, "y": 100, "offset": {"x": 0, "y": 0}}} ] } ], "scales": [ { "name": "x", "type": "band", "range": "width", "domain": [0, 1, 2, 3, 4, 5, 6] } ], "marks": [ { "type": "rect", "from": {"data": "nodes"}, "encode": { "enter": { "x": {"scale": "x", "field": "id", "band": 0.5}, "y": {"value": 80}, "width": {"value": 100}, "height": {"value": 40}, "fill": {"value": "lightgray"}, "stroke": {"value": "black"} } } }, { "type": "text", "from": {"data": "nodes"}, "encode": { "enter": { "x": {"scale": "x", "field": "id", "band": 0.5, "offset": 50}, "y": {"value": 100}, "fontSize": {"value": 14}, "text": {"field": "label"}, "align": {"value": "center"}, "baseline": {"value": "middle"} } } }, { "type": "path", "from": {"data": "links"}, "encode": { "enter": { "path": {"field": "path"}, "stroke": {"value": "black"} } } }, { "type": "rect", "from": {"data": "links"}, "encode": { "enter": { "x": {"scale": "x", "field": "id", "band": 0.70}, "y": [ {"test": "datum.source !== 2", "value": 90}, {"test": "datum.source === 2", "value": 15} ], "width": {"value": 75}, "height": {"value": 20}, "fill": {"value": "lightgray"} } } }, { "type": "text", "from": {"data": "links"}, "encode": { "enter": { "x": {"scale": "x", "field": "id", "band": 0.70, "offset": 37.5}, "y": [ {"test": "datum.source !== 2", "value": 100}, {"test": "datum.source === 2", "value": 25} ], "fontSize": {"value": 14}, "text": {"field": "label"}, "align": {"value": "center"}, "baseline": {"value": "middle"} } } }, { "type": "symbol", "from": {"data": "links"}, "encode": { "enter": { "x": {"field": "arrow.x", "offset": {"field": "arrow.offset.x"}}, "y": {"field": "arrow.y", "offset": {"field": "arrow.offset.y"}}, "shape": {"value": "triangle-right"}, "size": {"value": 100}, "fill": {"value": "black"}, "angle": [{"test": "datum.source === 2", "value": 90}, {"value": 0}] } } } ]
} </graph>