@@ -58,9 +58,21 @@ public static void DeclareMacros()
5858 Or ( And ( generator ,
5959 new Call ( "%maximize_update_and_repeat" , result , score ) ) ,
6060 new Call ( "nonvar" , result ) ) ) ) ;
61+ DeclareMacro ( "arg_min" , 3 ,
62+ ( arg , scoreExpression , result ) => {
63+ var score = Variable . MakeGenerated ( "*score*" ) ;
64+ return new Call ( "arg_min" , arg , score , new Call ( Symbol . Equal , score , scoreExpression ) , result ) ;
65+ } ) ;
66+ Functions . DeclareFunction ( "arg_min" , 2 ) ;
67+ DeclareMacro ( "arg_max" , 3 ,
68+ ( arg , scoreExpression , result ) => {
69+ var score = Variable . MakeGenerated ( "*score*" ) ;
70+ return new Call ( "arg_max" , arg , score , new Call ( Symbol . Equal , score , scoreExpression ) , result ) ;
71+ } ) ;
72+ Functions . DeclareFunction ( "arg_max" , 2 ) ;
6173 DeclareMacro ( "arg_min" , 4 ,
6274 ( arg , score , generator , result ) => {
63- var temp = Variable . MakeGenerated ( "*temp *" ) ;
75+ var temp = Variable . MakeGenerated ( "*MinScore *" ) ;
6476 return Or ( And ( GenerateArgmaxInit ( result ) ,
6577 new Call ( "%init" , temp ) ,
6678 new Call ( "%init" , score ) ,
@@ -70,23 +82,31 @@ public static void DeclareMacros()
7082 Symbol . Fail ) ,
7183 new Call ( "nonvar" , result ) ) ;
7284 } ) ;
85+ Functions . DeclareFunction ( "arg_min" , 3 ) ;
7386 DeclareMacro ( "arg_max" , 4 ,
7487 ( arg , score , generator , result ) => {
75- var temp = Variable . MakeGenerated ( "*temp *" ) ;
88+ var temp = Variable . MakeGenerated ( "*MaxScore *" ) ;
7689 return Or ( And ( GenerateArgmaxInit ( result ) ,
7790 new Call ( "%init" , temp ) ,
7891 new Call ( "%init" , score ) ,
7992 generator ,
8093 new Call ( "%maximize_update" , temp , score ) ,
8194 GenerateArgmaxUpdate ( result , arg ) ,
8295 Symbol . Fail ) ,
83- new Call ( "nonvar" , result ) ) ;
96+ new Call ( "nonvar" , temp ) ) ;
8497 } ) ;
98+ Functions . DeclareFunction ( "arg_max" , 3 ) ;
8599 DeclareMacro ( "sum" , 3 ,
86- ( score , generator , result ) => And ( new Call ( "%init_zero" , result ) ,
87- Or ( And ( generator ,
88- new Call ( "%sum_update_and_repeat" , result , score ) ) ,
89- Symbol . TruePredicate ) ) ) ;
100+ ( score , generator , result ) =>
101+ {
102+ var rtemp = Variable . MakeGenerated ( "*Sum*" ) ;
103+ return And ( new Call ( "%init_zero" , rtemp ) ,
104+ Or ( And ( generator ,
105+ new Call ( "%sum_update_and_repeat" , rtemp , score ) ) ,
106+ And ( new Call ( "nonvar" , rtemp ) ,
107+ new Call ( Symbol . Equal , rtemp , result ) ) ) ) ;
108+ } ) ;
109+ Functions . DeclareFunction ( "sum" , 2 ) ;
90110
91111 DeclareMacro ( "set" , 1 , arg =>
92112 {
0 commit comments