feat: no existential types, add hrun
This commit is contained in:
parent
a41e6b2faa
commit
ae1a5cf284
3 changed files with 166 additions and 42 deletions
|
|
@ -278,3 +278,18 @@ let hsim : ('i, 'o, 'r, 'y, 'yder, 'zin, 'zout) hnode ->
|
|||
let model = HNode { m with state = m.reset m.state r } in
|
||||
State { s with model; input = None; time = 0.; mode = D } in
|
||||
DNode { state; step; reset }
|
||||
|
||||
(** Run a simulation on a list of inputs
|
||||
|
||||
For each input value, we step the simulation as many times as
|
||||
needed for it to reach the horizon. *)
|
||||
let hrun (model : ('i, 'o, 'r, 'y, 'yder, 'zin, 'zout) hnode)
|
||||
(solver : ('y, 'yder, 'zin, 'zout) solver)
|
||||
(i : 'i dense list) : 'o dense list
|
||||
= let sim = hsim model solver and i = List.map Option.some i in
|
||||
let rec step os (DNode sim) i =
|
||||
let state, o = sim.step sim.state i in
|
||||
let sim = DNode { sim with state } in
|
||||
if o = None then (sim, List.rev_map Option.get os)
|
||||
else step (o :: os) sim None in
|
||||
List.fold_left_map (step []) sim i |> snd |> List.flatten
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue