Second, the LimitedFraction context that you set at the bottom has no effect. This is because MathObjects retain the context in which they were created, so since $ans1, $ans2, and $ans3 where created in the Fraction context, they continue to be in that context even after you change the current context to LimitedFraction.
The proper way to do this is to create them in LimitedFraction context initially (without the requireReducedFractions flag set, so the correct answer can be entered as an improper fraction) and then set the requireReducedFractions flag after they are created.
Here is the code:
#DESCRIPTION ##Type of #ENDDESCRIPTION DOCUMENT(); loadMacros( "PGstandard.pl", #"PGchoicemacros.pl", #"PGgraphmacros.pl", "MathObjects.pl", # "compoundProblem.pl", #"contextCurrency.pl", #"contextInequalities.pl", #"unionTables.pl", # "unionLists.pl", #"unionMacros.pl", #"contextLeadingZero.pl", "contextFraction.pl", #"answerHints.pl", #"problemPanic.pl", ); #for currency use Context("Currency") then Currency($A); #Then, in the text use $DOLLAR $a TEXT(beginproblem()); $showPartialCorrectAnswers = 1; Context("LimitedFraction"); $a1=random (3,7,2); $b1=random (4,8,4); $x=Compute("$a1/$b1"); $a2=random (4,8,2); $b2=random (5,7,2); $y=Compute("$a2/$b2"); $a3=random (3,9,3); $b3=random (5,10,5); $z=Compute("$a3/$b3"); $ans1=$x-$y; $ans2=$x+2*$y; $ans3=$x+$y+$z; #warn "a1=$a1, b1=$b1, x=$x, a2=$a2, b2=$b2, y=$y, a3=$a3, b3=$b3, z=$z, a1=$ans1"; Context()->flags->set(requireProperFractions => 1); BEGIN_TEXT Evaluate each expression if \(x =\frac{$a1}{$b1}\), \(y=\frac{$a2}{$b2}\), and \(z=\frac{$a3}{$b3}\).$BR Your answer should be a reduced fraction or a mixed number with the $BR faction part reduced (a mixed number can be entered in the form 2 3/4 to mean \(2\frac{3}{4}\)).$PAR $PAR a) \(x-y=\) \{ans_rule(6)\} $PAR b) \(x+2y=\) \{ans_rule(6)\} $PAR c) \(x+y+z=\) \{ans_rule(6)\} END_TEXT ANS($ans1->cmp); ANS($ans2->cmp); ANS($ans3->cmp); ENDDOCUMENT();
Hope that clears things up.
Davide