answerComposition.pl - An answer checker that determines if two functions compose to form a given function.
answerComposition.pl provides an answer checker that determines if two functions compose to form a given function. This can be used in problems where you ask a student to break a given function into a composition of two simpler functions, neither of which is allowed to be the identity function.
COMPOSITION_ANS($f, $g, %options)
An answer checked to see if $f composed with $g matches a given function,where $f and $g are one possible decomposition of the target function, and options are any of the options allowed by composition_ans_list() below.
$f and $g are used to display the "correct" answer, and the composition is computed from them.
This function actually supplies TWO answer checkers, for the two previous answer blanks. So be sure to call it immediately after the answer blanks have been supplied. (It may be best to use the NAMED_COMPOSITION_ANS checker below, which specifies the answer blanks explicitly.)
Example:
BEGIN_TEXT
\(f\circ g = (1+x)^2\) when
\(f(x)\) = \{ans_rule(20)\} and \(g(x)\) = \{ans_rule(20)\}
END_TEXT
COMPOSITION_ANS("x^2","1+x");
NAMED_COMPOSITION_ANS($fID=>$f, $gID=>$g, %options)
An answer checked to see if $f composed with $g matches a given function, where $fID and $gID are the names of the answer rules for the functions $f and $g, and $f and $g are the answers for the functions. %options are any of the options allowed by composition_ans_list() below.
This routine allows you to put the answer blanks for $f and $g at any location in the problem, and in any order.
Example:
BEGIN_TEXT
\(g\circ f = (1+x)^2\) when
\(f(x)\) = \{NAMED_ANS('f',20)\} and \(g(x)\) = \{NAMED_ANS('g',20)\}
END_TEXT
NAMED_COMPOSITION_ANS(f => "x^2", g => "1+x");
composition_ans_list($fID=>$f, $gID=>$g, %options)
This is an internal routine that returns the named answer checkers used by COMPOSITION_ANS and NAMED_COMPOSITION_ANS above.
$fID and $gID are the names of the answer rules for the functions and $f and $g are the answers for these functions. %options are from among:
var => 'x'
the name of the variable to use when both functions use the same one
vars => ['x','t']
the names of the variables for $f and $g
showVariableHints => 1 or 0
do/don't show errors when the variable used by the student is incorrect
message_cmp($correct)
Returns an answer evaluator that always returns incorrect, with a given error message. Used by COMPOSITION_ANS to produce "dummy" answer checkers for the two parts of the composition.