Skip to content

Commit a25dc9b

Browse files
committed
Equation functionality added
The evaluation function will now handle equations using either "=" or "==", and will deal with simple rearrangements of these equations.
1 parent ca33888 commit a25dc9b

1 file changed

Lines changed: 20 additions & 9 deletions

File tree

evaluate.m

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,13 @@
112112

113113
Depatternize[pattern_] := MapAll[DepatternizePattern, pattern]
114114

115+
(*StandardizeEquation: a function that automatically converts all instances
116+
of the equals sign to the repeated equals sign, so that anything WL would
117+
parse as an assignment gets parsed instead as an equu
118+
ation*)
119+
120+
StandardizeEquation[str_]:=FixedPoint[StringReplace["==="->"=="],StringReplace[str,"="->"=="]]
121+
115122
(*StructureMatchQ: a function that checks whether a user's response \
116123
has the same structure as a given answer template, given a set of \
117124
named variables.*)
@@ -158,8 +165,8 @@
158165
Print["Evaluating Structure"];
159166
namedVariables = ToExpression[Lookup[params,"named_variables",{}],TraditionalForm];
160167
correctQ = StructureMatchQ[
161-
ToExpression[ToString[response],TraditionalForm],
162-
ToExpression[ToString[answer],TraditionalForm],
168+
ToExpression[StandardizeEquation[ToString[response]],TraditionalForm],
169+
ToExpression[StandardizeEquation[ToString[answer]],TraditionalForm],
163170
namedVariables];
164171

165172
<|
@@ -186,14 +193,18 @@
186193

187194
SemanticMatchQ[response_,answer_] := Simplify[(response-answer)/.activeFunctionRules] == 0
188195

196+
SemanticMatchQ[response_Equal, answer_Equal] :=
197+
SemanticMatchQ[response[[1]]-response[[2]], answer[[1]]-answer[[2]]]||
198+
SemanticMatchQ[response[[1]]-response[[2]], answer[[2]]-answer[[1]]]
199+
189200
SemanticAndStructureMatchQ[response_,answer_,answerTemplate_,namedVariables_] :=
190201
TrueQ[SemanticMatchQ[response,answer]&&StructureMatchQ[response,answerTemplate,namedVariables]]
191202

192203
equalQSemantic[answer_, response_, params_] := Module[{correctQ},
193204
Print["Evaluating Semantic"];
194205
correctQ = SemanticMatchQ[
195-
ToExpression[ToString[response],TraditionalForm],
196-
ToExpression[ToString[answer],TraditionalForm]];
206+
ToExpression[StandardizeEquation[ToString[response]],TraditionalForm],
207+
ToExpression[StandardizeEquation[ToString[answer]],TraditionalForm]];
197208

198209
<|
199210
"error" -> Null,
@@ -206,9 +217,9 @@
206217
namedVariables = ToExpression[Lookup[params,"named_variables",{}],TraditionalForm];
207218
answerTemplate = ToExpression[Lookup[params,"answer_template",{}],TraditionalForm];
208219
correctQ = SemanticAndStructureMatchQ[
209-
ToExpression[ToString[response],TraditionalForm],
210-
ToExpression[ToString[answer],TraditionalForm],
211-
ToExpression[ToString[answerTemplate],TraditionalForm],
220+
ToExpression[StandardizeEquation[ToString[response]],TraditionalForm],
221+
ToExpression[StandardizeEquation[ToString[answer]],TraditionalForm],
222+
ToExpression[StandardizeEquation[ToString[answerTemplate]],TraditionalForm],
212223
namedVariables
213224
];
214225

@@ -247,8 +258,8 @@
247258
Print["Evaluating Structure"];
248259
namedVariables = ToExpression[Lookup[params,"named_variables",{}],TraditionalForm];
249260
correctQ = StrictStructureMatchQ[
250-
ToExpression[ToString[response],TraditionalForm],
251-
ToExpression[ToString[answer],TraditionalForm],
261+
ToExpression[StandardizeEquation[ToString[response]],TraditionalForm],
262+
ToExpression[StandardizeEquation[ToString[answer]],TraditionalForm],
252263
namedVariables];
253264

254265
<|

0 commit comments

Comments
 (0)