blob: 658590de1ce8cf6b151feb79e6aac36cfb4362b8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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 }
|