src/Tools/isac/MathEngBasic/model-def.sml
changeset 60770 365758b39d90
parent 60769 0df0759fed26
child 60771 1b072aab8f4e
equal deleted inserted replaced
60769:0df0759fed26 60770:365758b39d90
    55   val get_descr: i_model_feedback_TEST -> descriptor
    55   val get_descr: i_model_feedback_TEST -> descriptor
    56   val descriptor_exists: descriptor -> i_model_feedback_TEST -> bool
    56   val descriptor_exists: descriptor -> i_model_feedback_TEST -> bool
    57 
    57 
    58   val member_vnt: variants -> variant -> bool
    58   val member_vnt: variants -> variant -> bool
    59   val max_variants: o_model -> i_model_TEST -> variants
    59   val max_variants: o_model -> i_model_TEST -> variants
       
    60   val max_variants'': i_model_TEST -> variants
    60 
    61 
    61 (*from isac_test for Minisubpbl*)
    62 (*from isac_test for Minisubpbl*)
    62   val all_variants: ('a * variants * 'c * 'd * 'e) list -> variants
    63   val all_variants: ('a * variants * 'c * 'd * 'e) list -> variants
    63   val filter_variants': i_model_TEST -> variant -> i_model_TEST
    64   val filter_variants': i_model_TEST -> variant -> i_model_TEST
    64   val cnt_corrects: i_model_TEST -> int
    65   val cnt_corrects: i_model_TEST -> int
   218 fun cnt_corrects i_model = 
   219 fun cnt_corrects i_model = 
   219   fold (curry op +) (map (fn (_, _, _, _, (feedb, _)) =>
   220   fold (curry op +) (map (fn (_, _, _, _, (feedb, _)) =>
   220     if some_input feedb then 1 else 0) i_model) 0;
   221     if some_input feedb then 1 else 0) i_model) 0;
   221 fun arrange_args [] _ = []
   222 fun arrange_args [] _ = []
   222   | arrange_args (sum :: ss) (cnt, all) = (sum, nth cnt all) :: (arrange_args ss (cnt + 1, all)) 
   223   | arrange_args (sum :: ss) (cnt, all) = (sum, nth cnt all) :: (arrange_args ss (cnt + 1, all)) 
   223 fun max_variants o_model i_model =
   224 fun max_variants' i_model =
   224   let
   225   let
   225     val all_variants =
   226     val all_variants =
   226         map (fn (_, variants, _, _, _) => variants) i_model
   227         map (fn (_, variants, _, _, _) => variants) i_model
   227         |> flat
   228         |> flat
   228         |> distinct op =
   229         |> distinct op =
   232 
   233 
   233     val max_first = rev (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
   234     val max_first = rev (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
   234     val maxes = filter (fn (cnt, _) => curry op = (fst (hd max_first)) cnt) max_first
   235     val maxes = filter (fn (cnt, _) => curry op = (fst (hd max_first)) cnt) max_first
   235       |> map snd
   236       |> map snd
   236   in
   237   in
       
   238     maxes
       
   239   end
       
   240 fun max_variants o_model i_model =
       
   241   let
       
   242     val maxes = max_variants' i_model
       
   243   in
   237     if maxes = []
   244     if maxes = []
   238     then map (fn (_, variants, _, _, _) => variants) o_model
   245     then map (fn (_, variants, _, _, _) => variants) o_model
   239         |> flat
   246         |> flat
   240         |> distinct op =
   247         |> distinct op =
   241     else maxes
   248     else maxes
   242   end
   249   end 
       
   250 fun max_variants'' [] = raise ERROR "Model_Def.max_variants'' NOT for i_model = []"
       
   251   | max_variants'' i_model = max_variants' i_model
   243 
   252 
   244 
   253 
   245 (** definitions for O_Model.T **)
   254 (** definitions for O_Model.T **)
   246 
   255 
   247 type o_model_single =
   256 type o_model_single =