33(* The basic evaluation function code*)
44
55equalQNumeric [answer_ , response_ , params_ ] := Module [{tolerance },
6+ Print ["Evaluating Equal Numeric" ];
67 tolerance = If [Lookup [params , "tolerance_is_absolute" , False ],
78 Lookup [params , "tolerance" , 0 ],
89 Lookup [params , "tolerance" , 0 ] * answer
@@ -15,6 +16,7 @@ equalQNumeric[answer_, response_, params_] := Module[{tolerance},
1516]
1617
1718equalQOther [answer_ , response_ , params_ ] := Module [{correctQ },
19+ Print ["Evaluating Equal Other" ];
1820 < |
1921 "error" -> Null ,
2022 "is_correct" -> TrueQ [answer == response ]
@@ -111,11 +113,13 @@ StructureMatchQ[response_, answerTemplate_, namedVariables_,
111113 Atomic -> OptionValue [Atomic ]]]]
112114
113115equalQStructure [answer_ , response_ , params_ ] := Module [{namedVariables ,correctQ },
116+ Print ["Evaluating Structure" ];
114117 namedVariables = ToExpression [Lookup [params ,"named_variables" ,{}],TraditionalForm ];
115118 correctQ = StructureMatchQ [
116119 ToExpression [ToString [response ],TraditionalForm ],
117120 ToExpression [ToString [answer ],TraditionalForm ],
118121 namedVariables ];
122+
119123 < |
120124 "error" -> Null ,
121125 "is_correct" -> correctQ
@@ -124,9 +128,9 @@ equalQStructure[answer_, response_, params_] := Module[{namedVariables,correctQ}
124128
125129(* The evaluation function itself *)
126130
127- evalQ [answer_ , response_ , params_ ] := Module [{},
131+ evalQ [type_ , answer_ , response_ , params_ ] := Module [{},
128132 Which [
129- Lookup [ params , "equality_test" , "None" ] == "structure" ,
133+ type == "structure" ,
130134 equalQStructure [answer ,response ,params ],
131135 NumericQ [answer ],
132136 equalQNumeric [answer , response , params ],
@@ -135,14 +139,41 @@ evalQ[answer_, response_, params_] := Module[{},
135139 ]
136140];
137141
138- EvaluationFunction [answer_ , response_ , params_ ] := Module [{tolerance , correctQ , error },
139- result = evalQ [answer , response , params ];
140- < |
141- "is_correct" -> result ["is_correct" ],
142- "feedback" -> If [result ["is_correct" ],
142+ EvaluationFunction [type_ , answer_ , response_ , params_ ] := Module [{tolerance , correctQ , error },
143+ Print ["Running Evaluation Function" ];
144+ result = evalQ [type , answer , response , params ];
145+ Print ["Results" ];
146+ Print [result ];
147+ feedback = If [result ["is_correct" ],
143148 Lookup [params , "correct_response_feedback" , "Correct!" ],
144149 Lookup [params , "incorrect_response_feedback" , "Incorrect!" ]
145- ],
146- "error" -> result ["error" ]
150+ ];
151+ < |
152+ "command" -> "eval" ,
153+ "result" -> < |
154+ "is_correct" -> result ["is_correct" ],
155+ "feedback" -> feedback ,
156+ "error" -> result ["error" ]
157+ |>
147158 |>
148159];
160+
161+ evalQuestionIO = Function [
162+ Module [{jsonData , result },
163+ jsonData = Import [#1 , "JSON" ] //. List :> Association ;
164+ requestData = jsonData ["params" ];
165+ answer = requestData ["answer" ];
166+ response = requestData ["response" ];
167+ params = requestData ["params" ];
168+ type = params ["comparisonType" ];
169+ Print ["Evaluating Response Against Answer" ];
170+ result = EvaluationFunction [type , answer , response , params ];
171+ Print ["Response" ];
172+ Print [result ];
173+ Export [#2 , result , "JSON" , "Compact" -> True ]
174+ ]
175+ ];
176+
177+ argv = Rest [$ScriptCommandLine ];
178+ evalQuestionIO [argv [[1 ]], argv [[2 ]]]
179+
0 commit comments