To make this more concrete, I shall give an example. The code below is a
form with one field and a Submit button. Every time the user enters a
number and presses Submit, a new copy of the form will be sent back,
with a line displaying the number's factorial. At the time of writing,
this example can be tried out at
http://users.ox.ac.uk/~popx/webomatic_intro.html .
<!-- Fact.wom -->
<HTML>
<HEAD><TITLE>Factorials</TITLE></HEAD>
<BODY>
<H1>Factorials</H1>
Type a number into the field below, and we
will calculate its factorial for you.
<WOMForm>
<IntegerField input display=""><BR>
<Text output value=""><BR>
<INPUT TYPE=SUBMIT>
<OnSubmit rexx>
{
n = $input~getValue
if n<1 then
$output~setValue( "Input must be positive" )
else
do
f = localnamebase~factorial(n)
$output~setValue( n||'! =' f )
end
}
</OnSubmit>
</WOMForm>
</BODY>
</HTML>
<Methods>
{
::method factorial
use arg n
if n=1 then
return 1
else
return n*self~factorial(n-1)
}
</Methods>
It should be fairly obvious what the code is doing, but for a complete understanding, we must go into the semantics of WOM. Since the audience for this paper has a good knowledge of Rexx, I shall describe the semantics informally in an implementation-oriented way.