<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>LON-CAPA Homework System</title>
</head>
<body>
<h1>LON-CAPA Homework System</h1>
<h2>Tags</h2>
<ul>
<li>
Response tags
<p>
Arguments for all response tags
</p>
<ul>
<li>
<i>ID</i>, if this isn't set it will be set during
the publication step. It is used to assign parameters names
in a way that can be tracked if an instructor modifies
things by hand.
</li>
<li>
<i>name</i> optional, if set, it will be used by the
resource assembly tool when one is modifying parameters.
</li>
</ul>
<p>
Implemented response tags
</p>
<ul>
<li>
<b><responseparam></b> if it appears it should be
inside of a <*response> tag, defines an externally
adjustable parameter for this question. Arguments:
<ul>
<li>
<i>default</i> required, specifies a default value for
the parameter
</li>
<li>
<i>name</i> required, specifies an internal name for
the parameter
</li>
<li>
<i>type</i> required specifies the type of parameter,
one of "tolerance", "int", "float", "string", "date"
(configuration of paramters is handled by
lonparmset.pm and parameter.html)
</li>
<li>
<i>description</i> a string describing the parameter,
this is what is used to talk about a parameter outside
of a problem
</li>
</ul>
</li>
<li>
<b><numericalresponse></b> implements a numerical
answer, it needs an internal <b><textline></b> for
the response to go in. It checks all styles of numerical
supported in CAPA. Possible args are:
<ul>
<li><i>answer</i> required, specifies the correct answer, must be a perl list</li>
<li><i>type</i> optional, CAPA style str args, cs/ci/mc</li>
<li><i>units</i> optional, specifies unit of correct answer, CAPA style</li>
</ul>
</li>
<li>
<b><essayresponse></b> implements a ungraded large
text response, it need an internal <b><textarea></b>
for the response to go in.
</li>
<li>
<b><imageresponse></b> implements a image click
style image submission, uses the foil structure tags <a
href="#foil">below</a>. Additional tags that should appear
in a <foil> are:
<ul>
<li><b><image></b> required, the contained text
specifies a published graphical resource that is the
image used, should only appear once per foil</li>
<li><b><rectangle></b> required, the contained text
specifies a rectangular area that is correct, should
look like (1,2)-(3,4), at least 1 required</li>
<li><b><text></b> required, the contained text is
printed on top of the image.</li>
</ul>
</li>
<li>
<b><optionresponse></b> implements a "select from
these choices" style question, the choices are specified
by the instructor, it uses the foil structure tags <a
href="#foil">below</a> with this additional args:
<ul>
<li>
<b><foilgroup></b> is required to have
<i>options</i> which should be a perl list of possible
options for the student.
</li>
</ul>
</li>
<li>
<b><radiobuttonresponse></b> implements a true / false
style question with 1 correct answer.it uses the foil
structure tags <a href="#foil">below</a> but the
<i>value</i> of a <foil>can only be "true" or
"false" or "unused"
</li>
</ul>
<li>
<a name="foil">Foil Structure Tags</a>
<p>
All tags that implement a foil structure have an optional
arg of <i>max</i> that controls the maximum number of total
foils to show.
</p>
<ul>
<li>
<b><foilgroup></b> required, must be the tag that
surrounds all foil definitions
</li>
<li>
<b><foil></b> required, all data inside is a possible foil
</li>
<li>
<b><conceptgroup></b> optional, surrounds a
collection of <foil>, when a problem is displayed
only one of the contained <foil>is selected for
display. It receives one required argument
<i>concept</i>.
</li>
</ul>
</li>
<li>
Hint structure
<p>
All of these tags must appear inside a <b><*response></b> tag.
</p>
<ul>
<li>
<b><hintgroup></b> Tag that surrounds all of a hint.
</li>
<li>
<b><hintpart></b> required, Tag to implement
conditional hints. It has a required argument
<i>on</i>. When a <*hint> tag named the same as the
value the </i>on</i> attribute evaluates to be correct the
<hintpart> will show. If no other <hintpart>
are to show then all hintparts with a <i>on</i> of
"default" will show
</li>
<li>
<b><numericalhint></b> has all the arguments that
<numericalresponse>, does and the required attribute
<i>name</i> which should be set to the value of which
<hintpart> will be shown.
</li>
</ul>
</li>
<li>
Input Tags
<p>
This group of tags implement a mechanism for getting data
for students, they will usually be used by a
<*response>.
</p>
<ul>
<li>
<b><textarea></b> creates a Large text input box, If
data appears between the start and end tags, the data will
appear i the textarea if the student has not yet made a
submission. Additionally it takes two arguments <i>rows</i>
and <i>cols</i> which control the height and width of the
area respectively. It defaults to 10 and 80.
</li>
<li>
<b><textline></b> creates a single line of input
element, it accepts 1 argument <i>size</i> which controls
the width on the textline, it defaults to 20.
</li>
</ul>
</li>
<li>
Output Tags
<p>
This group of tags generate useful pieces of output.
</p>
<ul>
<li>
<b><displayduedate></b> this will insert the current
duedate if one is set into the document. It is generated
to be inside a table of 1x1 elements
</li>
<li>
<b><displaytitle></b> this will insert the title of
the problem from the metadata of the problem
</li>
<li>
<b><window></b> the text in between is put in a
popup javascript window
</li>
</ul>
</li>
<li>
Scripting
<p>
These tags allow the document to behave programatically
</p>
<ul>
<li>
<b><display></b> the intervening perl script is
evaluated in the safe space and the return value of the
script replaces the entire tag
</li>
<li>
<b><import></b> causes the parse to read in the file
named in the body of the tag and parse it as if the entire
text of the file had existed at location of the tag
</li>
<li>
<b><parserlib></b> the enclosed filename contains
definitions for new tags
</li>
<li>
<b><script></b> if the argument <i>type</i> is set
to "loncapa/perl" the enclosed data is a perl script which
is evaluated inside the perl Safe space. The return value
of the script is ignored.
</li>
<li>
<b><scriptlib></b> the enclosed filename contains
perl code to run in the safe space
</li>
<li>
<b><block></b> has a required argument
<i>condition</i> that is evaluated, it the condition is
true everything inside the tag is evaluated, if it is false
everything inside the block tag is skipped
</li>
<li>
<b><notsolved></b> everything inside the tag is
skipped if the problem is "solved"
</li>
<li>
<b><postanswerdate></b> everything inside the tag is
skipped if the problem is before the answer date
</li>
<li>
<b><preduedate></b> everything inside the tag is
skipped if the problem is after the due date
</li>
<li>
<b><randomlist></b> the enclosed tags are parsed in
a stable random order
</li>
<li>
<b><solved></b> everything inside the tag is
skipped if the problem is "not solved"
</li>
<li>
<b><while></b> implements a while loop, required
argument <i>condition</i> is a perl scriptlet that when
evaluated results in a true or false value, on true the
entirety of the text between the whiles is parsed. The
condition is tested again, etc. If false it goes to the
next node in the parse.
</li>
</ul>
</li>
<li>
Structure Tags
<p>
These tags give the problem a structure and take care of the
recording of data and giving the student messages.
</p>
<ul>
<li>
<b><problem></b> must be the first tag in the file,
this tag sets up the header of the webpage and generates
the submit buttons, it also handles due dates properly
</li>
<li>
<b><part></b> must be below <problem> if it is
going to be used. It does many of the same tasks as
<problem> but allows multiple separate problems to
exist in a single file.
</li>
<li>
<b><startouttext></b><b><endouttext></b> these
tags are somewhat special, they must have no internal text
and occur in pairs. Their use is to mark up the problem so
the web editor knows what sections should be edited in a
plain text block on the web.
</li>
</ul>
</li>
</ul>
<h2><script> Functions</h2>
<p>
A list of functions that have been written that are available in
the Safe space scripting environment inside a problem. The eventual
goal is to provide all of the functions available in CAPA. Detailed
descriptions of each function and comparison with CAPA is given in
<a href="homework6.html">CAPA to LON-CAPA Functions</a>.
</p>
<ul>
<li>sin(x), cos(x), tan(x)</li>
<li>asin(x), acos(x), atan(x), atan2(y,x)</li>
<li>log(x), log10(x)</li>
<li>exp(), pow(x,y), sqrt(x)</li>
<li>abs(x), sgn(x)</li>
<li>erf(x), erfc(x)</li>
<li>ceil(x), floor(x)</li>
<li>min(...), max(...)</li>
<li>factorial(n)</li>
<li>N%M</li>
<li>sinh(x), cosh(x), tanh(x)</li>
<li>asinh(x), acosh(x), atanh(x)</li>
<li>roundto(x,n)</li>
<li>web("a","b","c") or web(a,b,c)</li>
<li>html("a") or html(a)</li>
<li>j0(x), j1(x), jn(n,x), jv(y,x)</li>
<li>y0(x), y1(x), yn(n,x), yv(y,x)</li>
<li>random</li>
<li>choose</li>
<li>tex("a","b") or tex(a,b)</li>
<li>var_in_tex(a)</li>
<li>to_string(x), to_string(x,y)</li>
<li>class(), section()</li>
<li>name(), student_number()</li>
<li>open_date(), due_date(), answer_date()</li>
<li>sub_string()</li>
<li>array_moments(array)</li>
<li>format(x,y)</li>
<li>map(...)</li>
<li>caparesponse_check</li>
<li>caparesponse_check_list</li>
</ul>
<table border=1>
<tr>
<td valign="top"><b>CAPA Functions</b</td>
<td valign="top"><b>LON-CAPA</b</td>
<td valign="top"><b>Descriptions</b</td>
<td valign="top"><b>Differences (if any)</b</td>
</tr>
<tr>
<td valign="top">sin(x), cos(x), tan(x)</td>
<td valign="top">&sin($x), &cos($x), &tan($x)</td>
<td valign="top">Trigonometric functions where x is in radians. $x
can be a pure number, i.e., you can call &sin(3.1415)</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">sin(x), cos(x), tan(x)</td>
<td valign="top">&sin($x), &cos($x), &tan($x)</td>
<td valign="top">Trigonometric functions where x is in radians. $x
can be a pure number, i.e., you can call &sin(3.1415)</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">asin(x), acos(x), atan(x), atan2(y,x)</td>
<td valign="top">&asin($x), &acos($x), &atan($x), &atan2($y,$x)</td>
<td valign="top">Inverse trigonometric functions. Return value is
in radians. For asin and acos the value of x must be between -1 and 1.
The atan2 returns a value between -pi and pi the sign of which is determined
by y. $x and $y can be pure numbers</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">log(x), log10(x)</td>
<td valign="top">&log($x), &log10($x)</td>
<td valign="top">Natural and base-10 logarithm. $x can be a pure number</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">exp(x), pow(x,y), sqrt(x)</td>
<td valign="top">&exp($x), &pow($x,$y), &sqrt($x)</td>
<td valign="top">Exponential, power and square root, i.e.,e<sup>x</sup>, x<sup>y</sup> and /x. $x and $y can be pure numbers</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">abs(x), sgn(x)</td>
<td valign="top">&abs($x), &sgn($x)</td>
<td valign="top">Abs takes the absolute value of x while sgn(x) returns
1, 0 or -1 depending on the value of x. For x>0, sgn(x) = 1, for x=0, sgn(x)
= 0 and for x<0, sgn(x) = -1. $x can be a pure number</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">erf(x), erfc(x)</td>
<td valign="top">&erf($x), &erfc($x)</td>
<td valign="top">Error function. erf = 2/sqrt(pi) integral (0,x) e<sup>t-sq</sup> and <i> erfx(x)</i> = 1.0 - <i>erf(x)</i>. $x can be a pure number</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">ceil(x), floor(x)</td>
<td valign="top">&ceil($x), &floor($x)</td>
<td valign="top">Ceil function returns an integer rounded up whereas
floor function returns and integer rounded down. If x is an integer than
it returns the value of the integer. $x can be a pure number</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">min(...), max(...)</td>
<td valign="top">&min(...), &max(...)</td>
<td valign="top">Returns the minimum/ maximum value of a list of
arguments if the arguments are numbers. If the arguments are strings then
it returns a string sorted according to the ASCII codes</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">factorial(n)</td>
<td valign="top">&factorial($n)</td>
<td valign="top">Argument (n) must be an integer else it will round
down. The largest value for n is 170. $n can be a pure number</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">N%M</td>
<td valign="top">$N%$M</td>
<td valign="top">N and M are integers and returns the remainder (in
integer) of N/M. $N and $M can be pure numbers</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">sinh(x), cosh(x), tanh(x)</td>
<td valign="top">&sinh($x), &cosh($x), &tanh($x)</td>
<td valign="top">Hyperbolic functions. $x can be a pure number</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">asinh(x), acosh(x), atanh(x)</td>
<td valign="top">&asinh($x), &acosh($x), &atanh($x)</td>
<td valign="top">Inverse hyperbolic functions. $x can be a pure number</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">roundto(x,n)</td>
<td valign="top">&roundto($x,$n)</td>
<td valign="top">Rounds a real number to n decimal points. $x and
$n can be pure numbers</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">web("a","b","c") or web(a,b,c)</td>
<td valign="top">&web("a","b","c") or &web($a,$b,$c)</td>
<td valign="top">Returns either a, b or c depending on the output
medium. a is for plain ASCII, b for tex output and c for html output</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">html("a") or html(a)</td>
<td valign="top">&html("a") or &html($a)</td>
<td valign="top">Output only if the output mode chosen is in html
format</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">jn(m,x)</td>
<td valign="top">&j0($x), &j1($x), &jn($m,$x), &jv($y,$x)</td>
<td valign="top">Bessel functions of the first kind with orders 0,
1 and m respectively. For jn(m,x), m must be an integer whereas for jv(y,x),
y is real. $x can be a pure number. $m must be an integer and can be a
pure integer number. $y can be a pure real number</td>
<td valign="top">In CAPA, j0, j1 and jn are contained in one function,
jn(m,x) where m takes the value of 0, 1 or 2. jv(y,x) was not implemented</td>
</tr>
<tr>
<td valign="top">yn(m,x)</td>
<td valign="top">&y0($x), &y1($x), &yn($m,$x), &yv($y,$x)</td>
<td valign="top">Bessel functions of the second kind with orders
0, 1 and m respectively. For yn(m,x), m must be an integer whereas for
yv(y,x), y is real. $x can be a pure number. $m must be an integer and
can be a pure integer number. $y can be a pure real number</td>
<td valign="top">In CAPA, y0, y1 and yn are contained in one function,
yn(m,x) where m takes the value of 0, 1 or 2. yv(y,x) was not implemented</td>
</tr>
<tr>
<td valign="top">random(l,u,d)</td>
<td valign="top">&random($l,$u,$d)</td>
<td valign="top">Returns a uniformly distributed random number between
the lower bound, l and upper bound, u in steps of d. $l, $u and $d can
be pure numbers</td>
<td valign="top">In CAPA, all the 3 arguments must be of the same
type. However, now you can mix the type</td>
</tr>
<tr>
<td valign="top">choose(i,...)</td>
<td valign="top">&choose($i,...)</td>
<td valign="top">Choose the ith item from the argument list. i must
be an integer greater than 0 and the value of i should not exceed the number
of items. $i can be a pure integer</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">tex(a,b), tex("a","b")</td>
<td valign="top">&tex($a,$b), &tex("a","b")</td>
<td valign="top">Returns a if the output mode is in tex otherwise
returns b</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">var_in_tex(a)</td>
<td valign="top">&var_in_tex($a)</td>
<td valign="top">Equivalent to tex("a","")</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">to_string(x), to_string(x,y)</td>
<td valign="top">&to_string($x), &to_string($x,$y)</td>
<td valign="top">If x is an integer, returns a string. If x is real
than the output is a string with format given by y. For example, if x =
12.3456, &to_string(x,".3F") = 12.345 and &to_string(x,".3E") =
1.234E+01.</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">capa_id(), class(), section(), set(), problem()</td>
<td valign="top">&class(), &section()</td>
<td valign="top">Returns null string, class descriptive name, section
number, set number and null string.</td>
<td valign="top">capa_id(), set() and problem() are no longer used.
Currently, they return a null value.</td>
</tr>
<tr>
<td valign="top">name(), student_number()</td>
<td valign="top">&name(), &student_number()</td>
<td valign="top">Return the full name in the following format: lastname,
firstname initial. Student_number returns the student 9-alphanumeric string.
If undefined, the functions return null.</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">open_date(), due_date(), answer_date()</td>
<td valign="top">&open_date(), &due_date(), &answer_date()</td>
<td valign="top">Problem open date, due date and answer date. The
time is also included in 24-hr format.</td>
<td valign="top">Output format for time is changed slightly. If pass
noon, it displays ..pm else it displays ..am. So 23:59 is displayed as
11:59 pm.</td>
</tr>
<tr>
<td valign="top">get_seed(), set_seed()</td>
<td valign="top">Not implemented</td>
<td valign="top">Get and set the random seed.</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">sub_string(a,b,c)</td>
<td valign="top">&sub_string($a,$b,$c) <br>perl substr function.
However, note the differences</td>
<td valign="top">Retrieve a portion of string a starting from b and
length c. For example, $a = "Welcome to LON-CAPA";
$result=&sub_string($a,4,4); then $result is "come"</td>
<td valign="top">Perl intrinsic function, substr(string,b,c) starts
counting from 0 (as opposed to 1). In the example to the left, substr($a,4,4)
returns "ome ".</td>
</tr>
<tr>
<td valign="top">array[xx]</td>
<td valign="top">@arrayname <br>Array is intrinsic in perl.
To access a specific element use $arrayname[$n] where $n
is the $n+1 element since the array count starts from 0</td>
<td valign="top">"xx" can be a variable or a calculation.</td>
<td valign="top">In LON-CAPA, an array is defined by @arrayname.
It is not necessary to specify the dimension of the array. </td>
</tr>
<tr>
<td valign="top">array_moments(B,A)</td>
<td valign="top">@B=&array_moments(@A)</td>
<td valign="top">Evaluates the moments of an array A and place the
result in array B[i] where i = 0 to 4. The contents of B are as follows:
B[0] = number of elements, B[1] = mean, B[2] = variance, B[3] = skewness
and B[4] = kurtosis.</td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top">array_max(Name), array_min(Name)</td>
<td valign="top">&min(@Name), &max(@Name)</td>
<td valign="top">In LON-CAPA to find the maximum value of an array, use
&max(@arrayname) and to find the minimum value of an array, use
&min(@arrayname)</td>
<td valign="top">Combined with the min and max functions defined
earlier.</td>
</tr>
<tr>
<td valign="top">init_array(Name)</td>
<td valign="top">undef @name</td>
<td valign="top">To destroy the contents of an array, use</td>
<td valign="top">Use perl intrinsic undef function.</td>
</tr>
<tr>
<td valign="top">random_norma(...), random_beta(...), random_gamma(...),
random_exponential(...), random_poisson(...), random_chi(...), random_noncentral(...)</td>
<td valign="top">Not yet implemented.</td>
<td valign="top"> </td>
<td valign="top"> </td>
</tr>
</table>
<h2><script> Variables</h2>
<ul>
<li>
$external::target - set to the current target the xml parser
is parsing for
</li>
<li>
$external::part - set to the <i>id</i> of the current problem
<part>; zero if there are now <part>
</li>
<li>
$external::gradestatus - set to the value of the current
resource.partid.solved value
</li>
<li>
$external::datestatus - set to the current status of the clock
either CLOSED, CAN_ANSWER, CANNOT_ANSWER, or SHOW_ANSWER
</li>
<li>
$external::randomseed - set to the number that was used to
seed the random number generator
</li>
<li>$pi - set to PI </li>
<li>$rad2deg - converts radians to degrees </li>
<li>$deg2rad - converts degrees to radians </li>
</ul>
<hr>
<address><a href="mailto:albertel@marvin.lite.msu.edu">Guy Albertelli</a></address>
<!-- Created: Thu May 17 15:05:35 EDT 2001 -->
<!-- hhmts start -->
Last modified: Fri May 18 21:29:39 EDT 2001
<!-- hhmts end -->
</body>
</html>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>