WeBWorK Problems

Correct answer is either a string or a function

Correct answer is either a string or a function

by Danny Glin -
Number of replies: 3
Hi,
I'm modifying (well, fixing) an NPL problem on exact equations (Library/274/Exact/prob4.pg if you're curious), which first asks for the partials, then either asks for the solution, or the student to type "Not Exact" if the original equation isn't exact.
Here's the code snippet:
Context()->strings->add("Not Exact"=>{});
...
if($exact) {$ans = $f;}
else {$ans = Compute("Not Exact");}
ANS($ans->cmp());

When the equation is exact, everything works. The student can enter a function, or the string "Not Exact" (which is marked wrong with no error message).
The problem arises when the function is not exact. In this case the system expects a string. If a function is entered, the student gets the message "Your answer isn't a number (it looks like a formula that returns a number)".

So what I want to know is: Is there a way to have a string be the correct answer, but still allow functions to be submitted as answers (without an error message)?
In reply to Danny Glin

Re: Correct answer is either a string or a function

by D. Brian Walton -
Does the following discussion take care of the problem?

http://webwork.maa.org/wiki/StringsInContext

I can't remember exactly where, but I thought I had seen something similar to this in another problem. This is what I found when I did a quick search.

- Brian

D. Brian Walton
James Madison University
In reply to D. Brian Walton

Re: Correct answer is either a string or a function

by Danny Glin -
Yup, that link covers it. I looked around the wiki, but didn't happen to come across that page.
The solution is
ANS($ans->cmp(typeMatch=>Formula("x*y")));
This way it still gives errors if the student answer isn't either an allowable string or a function of x and y.
Thanks.
In reply to Danny Glin

Re: Correct answer is either a string or a function

by Robin Cruz -

This should turn off the error message:

ANS($answer ->cmp(showTypeWarnings=>0));

--rac