This problem set continues the study of self-referential unions. Some of
the problems cover functions that process two arguments from classes with
complex (self-referential) data definitions. --- You must follow the
design recipe. The graders will look for data definitions, contracts,
purpose statements, examples/tests, and properly organized function
definitions. For the latter, you must design templates. You do not need to
include the templates with your homework, however. If you do, comment them
out.
XML is a modern language (really: a family of languages) for encoding
data. It uses "named parentheses" to group structured data and strings
for everything else. [Well, it contains a few more things than that, but
this is good enough for now.] Here is an example:
<div>
<p><b>Problem A1</b>:</p>
<blockquote>
<p>XML is a modern language (really: a family of
languages) for encoding data. It uses "named
parentheses" to group structured data and strings for
everything else. [Well, it contains a few more things
than that, but this is good enough for now.] Here is
an example:
</p>
<p> Yes, this example is weird, because it is
self-referential but, hey, you should be used to
this by now.
</p>
</blockquote>
</div>
Yes, this example is weird, because it is self-referential but, hey,
you should be used to this by now.
You should have noticed that the example is not a complete
representation of Problem A1. It misses this paragraph and it misses
something in the middle. Nevertheless, it is a good example of the kind of
XML you will encounter in the real world.
There are many ways to represent XML data in Scheme. Here is one of them:
An Xexpr is one of:
-- (cons Symbol LoXexpr)
-- String
A LoXexpr is one of:
-- empty
-- (cons Xexpr LoXexpr)
Interpretation: An Xexpr
represents a bracketed pair of
"named parentheses" and whatever is in between, e.g.,
<p>
hello <em>world </em>
</p>
becomes
(list 'p "hello" (list 'em "world "))
(Yes, S-expressions are more compact than XML and 50 years older than XML,
but people don't like parentheses. They are soooooo ugly.)
In this context solve the following problems:
- Translate the XML example from above into an Xexpr.
- Design a function that counts the number of symbols in an Xexpr.
- Design a function that counts the number of characters in an Xexpr.