aboutsummaryrefslogtreecommitdiff
path: root/motus/js/next.ml
diff options
context:
space:
mode:
Diffstat (limited to 'motus/js/next.ml')
-rw-r--r--motus/js/next.ml36
1 files changed, 36 insertions, 0 deletions
diff --git a/motus/js/next.ml b/motus/js/next.ml
new file mode 100644
index 0000000..658590d
--- /dev/null
+++ b/motus/js/next.ml
@@ -0,0 +1,36 @@
+(** Load the next proposition from the word list *)
+
+open StdLabels
+
+type t = unit
+
+let process : t -> State.state -> State.state =
+ fun () state ->
+ (* Add the current proposition into the validated list *)
+ let rules = State.get_current_rules state.current_prop in
+
+ let rules =
+ Motus_lib.Criteria.merge_lists ~init:state.rules rules
+ |> List.sort_uniq ~cmp:Stdlib.compare
+ in
+
+ (* Update the word list with the new rules *)
+ let analysis =
+ List.fold_left
+ ~f:(Motus_lib.Persistence.add_word rules)
+ ~init:(Motus_lib.Persistence.empty_data ())
+ state.analysis.Motus_lib.Persistence.element
+ in
+
+ let propositions = state.current_prop :: state.propositions
+ and current_prop = [] in
+
+ let new_state = { state with propositions; current_prop; rules; analysis } in
+
+ (* Get the new proposition if any *)
+ let current_prop = Initialize.get_proposition analysis rules in
+ match current_prop with
+ | None -> new_state
+ | Some prop ->
+ FieldList.set_with_props prop state.fields new_state.rules;
+ State.{ new_state with rules; current_prop = prop }